我正在尝试创建一个可以从 forEach 循环内部删除元素的函数。
功能:
loopAndEdit = function(array,callback) {
var helper = {
data:{},
get:function() {
return helper.data;
},
remove:function() {
index = array.indexOf(helper.data);
array.splice(index,1);
return true;
}
};
tempArray = array;
tempArray.forEach(function(row) {
helper.data = row;
callback(helper)
});
}
为了测试它,我循环遍历一个数组并尝试删除所有元素:
names = ['abe','bob','chris'];
loopAndEdit(names,function(helper){
console.log('Working on ' + helper.data);
helper.remove();
});
console.log(names);
输出是:
Working on abe
Working on chris
[ 'bob' ]
我希望输出看起来像这样:
Working on abe
Working on bob
Working on chris
[]
我有一种感觉,可能是 helper.remove() 造成了麻烦,但目前我不确定。
感谢您的帮助!
最佳答案
这是因为当您在 forEach 循环中删除一项时,您的 forEach 循环无法循环遍历所有 3 个元素。
因此,假设您的 forEach 循环遍历了索引 0,然后遍历了索引 1,其中删除了索引 1。此时数组的长度更改为 n-1,但 for 循环内的索引仍然相同。
为了制作数组的副本,以便它不会更改原始数组。
这样做 -
var tempArray = names.slice(0);
而不是这个-
var tempArray = names;
关于Javascript 删除 forEach 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387188/