Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么直接在数组实例上调用Array.prototype.map会导致;“未经修改”;阵列?_Javascript_Arrays_Spread Syntax - Fatal编程技术网

Javascript 为什么直接在数组实例上调用Array.prototype.map会导致;“未经修改”;阵列?

Javascript 为什么直接在数组实例上调用Array.prototype.map会导致;“未经修改”;阵列?,javascript,arrays,spread-syntax,Javascript,Arrays,Spread Syntax,为什么直接在数组实例o上调用Array.prototype.map会导致“未修改”的数组 相反,我必须使用apply(或call): 我错过了什么 最后,上述方案的替代方案是: [...o].map((x, y) => y*2); // [ 0, 2, 4] 我这样认为是因为这纠正了我最初实现中缺少的任何东西 为什么直接在数组实例o上调用Array.prototype.map会导致“未修改”的数组 因为.map只对实际存在的元素起作用数组(3)创建长度为3的空数组。换句话说:.map忽略

为什么直接在数组实例
o
上调用
Array.prototype.map
会导致“未修改”的数组

相反,我必须使用apply(或call):

我错过了什么

最后,上述方案的替代方案是:

[...o].map((x, y) => y*2); // [ 0, 2, 4]
我这样认为是因为这纠正了我最初实现中缺少的任何东西

为什么直接在数组实例o上调用Array.prototype.map会导致“未修改”的数组

因为
.map
只对实际存在的元素起作用<代码>数组(3)创建长度为
3
空数组。换句话说:
.map
忽略孔

相反,我必须使用apply(或call):。。。我错过了什么

Array.apply(0,o)
相当于
Array(undefined,undefined,undefined)
在您的情况下,即您正在创建一个包含三个元素的数组

如果你比较一下,差异会变得更加明显

console.dir(Array(3));
// vs
console.dir(Array.apply(null, Array(3)));
第一个仅具有属性
length
,第二个还具有属性
0
1
2

最后,上述方法的另一种选择是:

扩展运算符将调用
o[Symbol.iterator]
。数组的迭代器将在孔上迭代,就像使用正常的
for
循环一样

为什么直接在数组实例o上调用Array.prototype.map会导致“未修改”的数组

因为
.map
只对实际存在的元素起作用<代码>数组(3)创建长度为
3
空数组。换句话说:
.map
忽略孔

相反,我必须使用apply(或call):。。。我错过了什么

Array.apply(0,o)
相当于
Array(undefined,undefined,undefined)
在您的情况下,即您正在创建一个包含三个元素的数组

如果你比较一下,差异会变得更加明显

console.dir(Array(3));
// vs
console.dir(Array.apply(null, Array(3)));
第一个仅具有属性
length
,第二个还具有属性
0
1
2

最后,上述方法的另一种选择是:


扩展运算符将调用
o[Symbol.iterator]
。数组的迭代器将在孔上迭代,就像使用正常的
for
循环一样。

您有一个空数组,因此没有任何东西可以在大多数数组迭代器函数上迭代跳过未初始化的元素。如果查看[].map()多边形填充(真正的多边形填充,而不是u或lodash),您将看到类似于
if的内容(r中的i)
对映射的元素进行筛选。您有一个空数组,因此没有任何东西可以在大多数数组迭代器函数上迭代跳过未初始化的元素。如果查看[].map()polyfills(real polyfills,而不是u或lodash),您将在映射的元素上看到类似于
if(r中的i)
的筛选。
console.dir(Array(3));
// vs
console.dir(Array.apply(null, Array(3)));