Javascript removing elements in forEach
本问题已经有最佳答案,请猛点这里访问。
我试图做一个可以从forEach循环中删除元素的函数。
功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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) }); } |
为了测试它,我遍历一个数组并尝试删除所有元素:
1 2 3 4 5 6 7 8 9 | names = ['abe','bob','chris']; loopAndEdit(names,function(helper){ console.log('Working on ' + helper.data); helper.remove(); }); console.log(names); |
输出为:
1 2 3 | Working on abe Working on chris [ 'bob' ] |
我希望输出看起来像:
1 2 3 4 | Working on abe Working on bob Working on chris [] |
我感觉可能是helper.remove()引起了麻烦,但是我不确定这一点。
谢谢您的帮助!
这是因为在删除forEach循环中的一项时,forEach循环无法遍历所有3个元素。
因此,假设您的forEach循环经过了索引0,而索引1则除去了索引1。此时,数组的长度更改为n-1,但是for循环内的索引仍然相同。
为了制作一个数组的副本,以便它不会在原始数组中进行更改。
做这个 -
1 | var tempArray = names.slice(0); |
代替这个-
1 | var tempArray = names; |