wingmeng / front-end-quiz

前端小测试答题收集
0 stars 0 forks source link

JS基础测试34期:数组基本操作 #19

Open wingmeng opened 5 years ago

wingmeng commented 5 years ago

题目:

image


我的回答:

第 1 题:arr 的长度是多少?

解析:数组中的空元素 (empty 元素) 也会被算到数组长度中

console.log(arr.length);  // 4

第 2 题:去除 arr 中的空数组项

解析:数组中的 empty 元素不会参与数组项遍历,故只需返回 true 即可过滤掉 empty 元素(而不会牵连 0NaNnullundefined'' 这些)

arr = arr.filter(it => true);
console.log(arr);  // [1, 2, 3]

第 3 题:写出表达式运行结果

解析:parseInt 接收 stringradix 两个参数,前者是待转换的字符串,后者是进制参考基数,默认是 10。当 parseInt 作为 map 方法的回调函数时,parseInt 的 string 的实参是数组项,radix 的实参是数组索引值,故执行过程如下:

parseInt(1, 0);  // 1. `radix` 为 0 时会自动转换成 10,故输出 1
parseInt(2, 1);  // 2. `radix` 值非法(没有一进制),无法解析,故输出 NaN
parseInt(3, 2);  // 3. `string` 为 3 ,`radix` 为 2,无法将 3 按二进制解析,故输出 NaN
let arr2 = arr.map(parseInt);
console.log(arr2);  // [1, NaN, NaN]

第 4 题:arr 和 arr2 合并成数组 arr3,兼容 IE8+

var arr3 = arr.concat(arr2);
console.log(arr3);  // [1, 2, 3, 1, NaN, NaN]

第 5 题:去除 arr3 中重复内容

解析:利用 ES6 中的 Set 集合不存在重复项的特点来去重

arr3 = [...new Set(arr3)];
console.log(arr3);  // [1, 2, 3, NaN]
wingmeng commented 5 years ago

自我评分:优秀

优秀、良好、一般、差劲

学习收获:

  1. 数组的 map、filter、some、every 等函数式方法会自动过滤掉数组中的 empty 元素,即这些 empty 不会参与数组项遍历。
wingmeng commented 5 years ago

最近实践:

// 第 2 题:
arr = arr.filter(String);  // 或者:
arr = arr.filter(Number);