我最近发现.map
没有迭代由有孔数组创建的未定义,数组的各个索引已定义,但有些不是:
// Holed
var array = [];
array[0] = 1;
array[2] = 3;
array // => [1,undefined,3];
// Not Holed
var array = [1,3];
array // => [1,3]; The "same" as Holed
当涉及到迭代时,这两个应该相同的数组,以不同的方式定义,以不同的方式迭代(参见第一个发送)
这是我的问题,
>有没有办法迭代有孔阵列?
>我怀疑它们的确切字节实际上是不同的,这种奇怪的行为是由于JavaScript如何显示未定义的这些值,而不是未定义的.我对么?对这种异常有任何潜在的解释吗?
非常欢迎任何帮助.谢谢!
最佳答案
Is there any way to iterate over the holed arrays?
多数(全部?)内置的Array.prototype函数在稀疏数组中跳过漏洞.
这意味着如果要获取缺失索引的未定义值,则需要先将该数组转换为非稀疏数组.
在ES2015的帮助下,您可以使用数组迭代器.最简单的方法是使用数组扩展语法:
[...array]
然后你可以将映射运算符应用于它[… array] .map(handler)
I suspect that the exact bytes of these are actually different,and this strange behavior is due to how JavaScript displays these values which are not defined,not undefined. Am I correct? Is there any underlying explanation for this anomaly?
你是对的,它没有明确地保存未定义的值.由于JS中的数组实际上被称为“内部对象”(或更短 – 只是对象),因此它们的索引只是这些对象的属性.因此,当您跳过索引时 – 该属性根本没有设置且不存在.
它与访问非现有对象属性时相同:
var o = {};
o.foo // undefined