触宝科技 前端工程师面试题

🌙
手机阅读
本文目录结构

触宝科技 前端工程师面试题

  1. 自我介绍

  2. 项目

  3. 轮播图实现的原理

  4. js基本数据类型

  5. null和undefined的区别

  6. null == undefined 的值是什么,为什么

  7. new 操作符的过程

  8. call apply 的区别

  9. 讲一下闭包

  10. 闭包打印 1-9

  11. splice、filter、join、split 用法

  12. 数组转成字符串

  13. 1000个button需要注册点击事件,怎么实现

  14. 事件代理(委托)优缺点

  15. 水平居中怎么实现

  16. H5 C3 新特性

  17. css不兼容的情况有了解吗,怎么解决

  18. ES6 的东西知道哪些

  19. let const var的区别

  20. 箭头函数与普通函数的区别

  21. 手写一个数组去重

  22. 排序算法,sort的用法解释一下

  23. 平时怎么学习前端,学了多久了,有实习经历吗

  24. 学习的过程中有自己做demo吗

  25. 自我介绍

  26. 项目介绍

  27. 轮播图的实现原理

  28. 知道哪些数组的方法

  29. splice 和 slice 的区别

手撕代码

问题一: 实现数组 arr 根据 id 来排序

var arr = [
    { id: 2, name: 'test', score: 50 },
    { id: 3, name: 'test', score: 60 },
    { id: 5, name: 'test1', score: 70 }
]
 
function solution(arr){
    return arr.sort((a,b) => a['id']-b['id'])
}

问题二:将 name 值相等的 score 加起来,例如问题一的arr,返回 {test: 110, test1: 70}

var arr = [
    { id: 2, name: 'test', age: 15, score: 60 },
    { id: 2, name: 'test', age: 25, score: 60 },
    { id: 3, name: 'test1', age: 25, score: 60 },
    { id: 5, name: 'test2', age: 35, score: 60 }
]

function solution(arr, attr) {
    var obj = {}
    for (let i = 0; i < arr.length; i++) {
        var key = arr[i][attr]
        if (!obj[key]) {
            obj[key] = arr[i]['score']
        } else {
            obj[key] += arr[i]['score']
        }
    }
    return obj
}

console.log(solution(arr, 'name')); // {test: 120, test1: 60, test2: 60}

问题三:函数的第二个参数是个数组,比如

attr = [ 'id']  就是将id的相同的score相加
attr = ['id', 'name']  就是将id和name相同的score相加
attr = ['id', 'name', 'age']  就是将id、name和age都相同的score相加
// 此问关键在于确定一个唯一的key
var arr = [
    { id: 2, name: 'test', age: 15, score: 60 },
    { id: 2, name: 'test', age: 25, score: 60 },
    { id: 3, name: 'test1', age: 25, score: 60 },
    { id: 5, name: 'test2', age: 35, score: 60 }
]

function solution(arr, attr) {
    var obj = {}
    var str = attr.join('_') // 2_test

    for (let i = 0; i < arr.length; i++) {
        var curr = arr[i];
        var a = []
        attr.forEach(ele => {
            a.push(curr[ele])
        })
        var key = a.join('_')
        if(obj[key]){
            obj[key] += curr['score']
        }else{
            obj[key] = curr['score']
        }
    }
    return obj
}

console.log(solution(arr, ['id', 'name'])); // {2_test: 120, 3_test1: 60, 5_test2: 60}
  1. 浏览器缓存机制
  2. 这样禁止缓存
  3. 项目中有用到缓存吗
  4. 你对加班怎么看
  5. 实习时间

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了