JaimeCheng / zxx-quiz-summary

zxx-quiz 小测收集总结
https://github.com/zhangxinxu/quiz
1 stars 0 forks source link

JS基础测试34 - 数组操作 #1

Open JaimeCheng opened 5 years ago

JaimeCheng commented 5 years ago

题目: 原issue

回答:

// 我的回答 5分
// 第一题
3
// 第二题
arr = arr.filter(el => !!el)
// 第三题
[1, NaN, NaN]
// 第4题
arr3 = arr.concat(arr2)
// 第5题
var temp = []
arr3.forEach(el => {
   if (temp.indexOf(el) === -1) {
       temp.push(el)
   }
})
arr3 = temp  // [1, 2, 3, NaN, NaN]

满分回答1 | 满分回答2

总结:

  1. 第一题完全不仔细,当时数的索引 0,1,2,3 就写了3;
  2. 第二题考虑欠佳,0、NaN、null、undefined、''会受到牵连;
  3. 第三题对 parseInt 的参数不熟悉,也没有认真思考这样的写法;
  4. 第五题错误,虽然 NaN === NaNfalse,但是去重也要去掉;
  5. es6语法要熟练用起来;
  6. 和优秀的人差距还很大很大。

    > 在线demo <

JaimeCheng commented 5 years ago

zxx: 本期要点

  1. 空数组项也会作为length的一部分;空数组项和空字符串项是有区别的。
  2. 第2题 本题只是过滤空数组项,不包括null, undefined这类。
  3. 去除空数组项两个比较好的回答:
    • 数组中的 empty 元素不会参与数组项遍历,故只需返回 true 即可过滤掉 empty 元素(而不会牵连 0、NaN、null、undefined、'' 这些)arr.filter(it => true)。然后补充,但是走for循环,还是会遍历empty数组项。
    • 或者filter方法参数直接就是一个function即可。例如:arr.filter(Boolean)(纠正:不能是Boolean,false会被过滤),arr.filter(Number), arr.filter(String)
    • 上面并不会最好的方法。数组有个API,天然去除空数组项,arr.flat()。flat()可以让数组扁平化的方法。
  4. 第3题标准答案应该是[1, NaN, NaN],map里面Function支持参数(value, index, arr),参见wingmeng的释义。
  5. 第4题就是concat,可以数组合并。我自己用“连接猫”记忆这个API。可以分别连接子项,也可以直接连接数组。如果不考虑兼容,可以[...arr, ...arr2]。其他参考方法:Array.prototype.push.apply(arr3, arr2),也可以[].push.apply(arr3, arr2),此时arr3是合并后的数组。
  6. 数组去重。使用new Set(arr3),然后把Set对象转换成数组。转数组两个常用方法,一个是Array.from,还有一个是[...]。