我正在尝试从数组中删除所有匹配的项目,但它总是留下一个项目.
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我需要删除对象.
问题是.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)
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |