JS基础测试34期(js数组相关)

简答题

所有题目共用一个上下文,已知数组:

1
let arr = [1,2,,3];
  1. 数组arr的长度是多少
  2. 去除数组arr中的空项
  3. arr2 = arr.map(parseInt),请写下arr2的内容
  4. arr和arr2合并成数组arr3,兼容IE8+
  5. 去除数组 arr3 中重复的内容

下面请开始你的表演:

大佬解答

  1. 空数组项也会作为length的一部分;空数组项和空字符串项是有区别的.
1
console.log(arr.length);//4
  1. 本题只是过滤空数组项,不包括null, undefined这类。
1
arr.filter(e=>true);

过滤数组空项

2-1. 去除空数组项两个比较好的回答:

  • 数组中的 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()可以让数组扁平化的方法。

  1. 第3题标准答案应该是[1, NaN, NaN],map里面Function支持参数(value, index, arr)

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

1
2
3
parseInt(1, 0);  // 1. `radix` 为 0 时会自动转换成 10,故输出 1
parseInt(2, 1); // 2. `radix` 值非法(没有一进制),无法解析,故输出 NaN
parseInt(3, 2); // 3. `string` 为 3 ,`radix` 为 2,无法将 3 按二进制解析,故输出 NaN
  1. arr和arr2合并成数组arr3,兼容IE8+
1
2
var arr3 = arr.concat(arr2);
console.log(arr3);//[1,2,3,1,NaN,NaN]
  1. 去除arr3中重复的内容:

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

1
2
var arr3 = [...new Set(arr3)];
console.log(arr3); //[1,2,3,NaN]