数组自引用映射 - 非常奇怪的结果

时间:2013-01-25 05:28:42

标签: javascript arrays map self-reference

在尝试使用一些不同的方法生成JavaScript数组时,我偶然发现了一个奇怪的结果。使用mappush一系列自引用(DEMO):

a=[1,1,1,1,1,1,1,1,1,1];
a=a.map(a.push,a);

我得到以下结果(在Chrome中):

[13,16,19,22,25,28,31,34,37,40]

任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:5)

对于a中的每个元素,使用该元素,该元素的索引和遍历的数组调用push。然后,对于数组中的每个元素,我们添加这三个附加元素。这说明原始数组中每个元素的长度增加了3。 push的结果是添加元素后数组的长度,因此生成的数组(来自map)是一个数组,在每次推送回调完成后保存a数组的长度。 / p>

请参阅mappush的文档。

答案 1 :(得分:1)

它与push的返回值是新长度有关。不知道为什么它增加3。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/push

  

<强>返回
  调用方法的对象的新长度属性。