在JavaScript中为空数组使用a for each循环

Cra*_*aig 21 javascript

我发现在javascript中我不能在空数组上使用a.任何人都可以向我解释为什么会这样吗?

我在javascript中初始化了一个数组,如下所示:

var arr = new Array(10);
Run Code Online (Sandbox Code Playgroud)

当我在数组上使用a for each循环时没有任何反应:

arr.forEach(function(i) {
    i = 0;
});
Run Code Online (Sandbox Code Playgroud)

结果仍然是一组未定义的值:

arr = [ , , , , , , , , , ];
Run Code Online (Sandbox Code Playgroud)

我想也许因为数组中的每个项都是未定义的,所以它甚至都不执行forEach.我认为它仍然会遍历未定义的项目.谁能解释为什么会这样?这个问题不是要求如何最有效地用零填充数组,它要求详细说明每个循环和空数组的交互.

Far*_*ina 20

如果将阵列初始化修改为:您可以像预期的那样使用forEach:

var arr = Array.apply(null, Array(10))
Run Code Online (Sandbox Code Playgroud)

然后你可以像以下一样做一个foreach:

arr.forEach(function(el, index) {
    arr[index] = 0;
});
Run Code Online (Sandbox Code Playgroud)

结果是:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)


Ada*_*dam 15

你中途对了!

我想也许因为数组中的每个项都是未定义的,所以它甚至都不执行forEach.

Array.prototype.forEach不访问已删除或删除的索引; 这是一个叫做椭圆的过程.因此,它会执行,但会跳过每个元素.

来自MDN: MDN关于forEach的屏幕截图

  • 要详细说明@TheZenCoder的评论,或许你应该修改你的文字说_"Array.prototype.forEach不访问已被删除或删除的索引"_,如[MDN]中所述(https://developer.mozilla .org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Description)参考.它_does_访问"未定义"的元素. (2认同)

Roc*_*mat 7

.forEach为数组中的每个元素运行您的函数。设置的值i没有任何作用,它不是参考。

只需使用普通for循环:

for(var i = 0; i < arr.length; i++){
    arr[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)

或者不做new Array(10),你可以做:

var arr = [];
for(var i = 0; i < 10; i++){
    arr[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案而不是 Qambar 的答案。吻。 (2认同)

Mar*_*k E 5

基于Faris Zacina 的回答,一种单行方法。

var zeros = Array.apply(null, Array(10)).map(function(){return 0})
Run Code Online (Sandbox Code Playgroud)

  • 哦..试图赢得一些积分不是吗.. (2认同)