我发现在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:

.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)
基于Faris Zacina 的回答,一种单行方法。
var zeros = Array.apply(null, Array(10)).map(function(){return 0})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24900 次 |
| 最近记录: |