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;