JS-每周3道面试题(第5周)

220 阅读1分钟
  1. 已知数组:

    var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

    编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

    let res = Array.from(new Set(arr.flat(Infinity))).sort((a, b) => {return a-b})
    console.log(res)

这边主要考的事es6的api

  1. Array.from 将类数组对象转化为数组
  2. new Set set数据结构,类似数组,成员唯一
  3. flat 用于将嵌套的数组“拉平”

结果:

结果

  1. 请把俩个数组 [A1, A2, B1, B2, C1, C2, D1, D2] 和 [A, B, C, D],合并为 [A1, A2, A, B1, B2, B, C1, C2, C, D1, D2, D]。
    let a1 =  ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']
    let a2 = ['A', 'B', 'C', 'D'].map((item) => {
      return item + 3
    })
    
    let a3 = [...a1, ...a2].sort().map((item) => {
      if(item.includes('3')){
        return item.split('')[0]
      }
      return item
    })

    console.log(a3)

结果:

结果

这里比较巧妙的利用在a2数组的每一项拼接字符串‘3’,以此来用作排序的条件,然后再加‘3’去除掉,得到结果。

  1. 改造下面的代码,使之输出0 - 9,写出你能想到的所有解法。
    for (var i = 0; i< 10; i++){
        setTimeout(() => {
            console.log(i);
        }, 1000)
    }

解1.

    for (let i=0; i<10; i++) {
        setTimeout(() => {
            console.log(i)
        }, 1000)
    }

这里是利用了let的特性,拥有块级作用域,不会变量提升

解2.

    for (var i=0; i<10; i++) {
        setTimeout(((i) => {
            console.log(i)
        })(i), 1000)
    }

这里是利用立即执行函数传参