我试图创建一个可以从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
[]
我有一种感觉,它可能是帮手。删除()造成麻烦,但我现在还不确定。
感谢您的帮助!
答案 0 :(得分:3)
这是因为你的forEach循环无法遍历所有3个元素,因为你要删除forEach循环中的一个项目。
所以,假设你的forEach循环经过了索引0而不是1,它删除了索引1.此时,数组的长度变为n-1,但for循环中的索引仍然是相同的。
为了制作数组的副本,使其不会在原始数组中进行更改。
这样做 -
var tempArray = names.slice(0);
而不是这个 -
var tempArray = names;