删除数组中的每个对象

I N*_* NA -1 javascript

我正在尝试从数组中删除所有匹配的项目,但它总是留下一个项目.

var item1 = {item: "item1"},
    array = [{
        item: "item1"},{
        item: "item_non"},{
        item: "item1"},{
        item: "item_non"},{
        item: "item1"},{
        item: "item1"},{
        item: "item1"},{
        item: "item_non"},{
        item: "item_non"
    }];
array.forEach(function(items){
    if(item1.item === items.item){
        var index = array.indexOf(items);
        if(index !== -1){
            array.splice(index,1);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我也搞砸了,它只删除了匹配的4/5项而不是5/5.

小提琴

没有选项可以使用Array#filter我需要删除对象.

Bar*_*mar 6

问题是.splice()在删除元素之后移动所有元素.因此,如果删除元素3,则元素4变为3,5,变为4,依此类推.循环的下一次迭代将处理元素4,但这是原始元素5 - 跳过原始元素4.

解决这个问题的方法是反向处理数组..forEach不能这样做,AFAIK,所以你必须使用一个for循环:

for (var i = array.length - 1; i >= 0; i--) {
    item = array[i];
    if (item1.item == item.item) {
        array.splice(i, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)