Javascript forEach中删除元素
我试图做一个函数,可以从一个forEach循环中删除一个元素。
function:
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) }); }
为了testing它,我遍历一个数组并尝试删除所有元素:
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;