【发布时间】:2016-10-28 03:06:51
【问题描述】:
我最近发现.map 不会迭代未定义的由孔数组创建,这些数组的各个索引已定义,但有些未定义:
// Holed
var array = [];
array[0] = 1;
array[2] = 3;
array // => [1, undefined, 3];
// Not Holed
var array = [1, undefined, 3];
array // => [1, undefined, 3]; The "same" as Holed
说到迭代,这两个应该是相同的,以不同方式定义的数组被不同地迭代(见第一句)
这是我的问题,
- 有什么方法可以遍历有孔的数组吗?
- 我怀疑这些是的确切字节实际上是不同的,而这种奇怪的行为是由于JavaScript如何显示这些未定义的值,而不是
undefined。我对么?这种异常现象有什么潜在的解释吗?
非常欢迎任何帮助。谢谢!
【问题讨论】:
-
您可以使用普通的
for循环进行迭代。不同之处在于第一个数组中的属性1从未设置过,而在第二个数组中却有。 -
您可以使用其迭代器将有孔数组转换为无孔数组:
const arrayWithoutHoles = [...array];或以特别方式[...array].map(f) -
先过滤掉vals?
array.filter(function (f) {return f != undefined}) -
@James111 先试试你的代码?
-
试试这个:
var holed = []; holed[0] = 0; holded[2] = 2; console.log(Object.keys(holed)); var un = [ 0, undefined, 2 ]; console.log(Object.keys(un));
标签: javascript arrays