关于数组:JavaScript删除forEach中的元素

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;