Javascript删除forEach中的元素

时间:2014-10-15 16:10:18

标签: javascript arrays node.js foreach

我试图创建一个可以从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
[]

我有一种感觉,它可能是帮手。删除()造成麻烦,但我现在还不确定。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

这是因为你的forEach循环无法遍历所有3个元素,因为你要删除forEach循环中的一个项目。

所以,假设你的forEach循环经过了索引0而不是1,它删除了索引1.此时,数组的长度变为n-1,但for循环中的索引仍然是相同的。

为了制作数组的副本,使其不会在原始数组中进行更改。

这样做 -

var tempArray = names.slice(0);

而不是这个 -

var tempArray = names;