data是一个包含不同类型元素的数组。我想遍历此数组并删除所有类型为AB的元素。这是我到目前为止所拥有的:

for(i=0;i<data.length;i++){
    if (i.type === "A"|| i.type === "B") {
        data.splice(i, 1);
    }
}


即使某些类型为AB,它也不会删除任何内容。

有人可以告诉我为什么这是错误的,我应该如何解决!

提前致谢!

最佳答案

问题

您的代码中实际上有两个错误:


您正在向前循环。如果要在遍历数组元素时拼接一个数组,则需要向后循环。
i.type应该是data[i].typei只是一个数字,甚至没有type属性。


固定码

for(var i = data.length-1; i >= 0; i--){
    if (data[i].type === "A"|| data[i].type === "B") {
        data.splice(i, 1);
    }
}


演示



var data = [
    { value : 'Tom', type : 'A' },
    { value : 'Susan', type : 'C' },
    { value : 'Frank', type : 'B' },
    { value : 'Hakeem', type : 'A' },
    { value : 'Ali', type : 'C' },
    { value : 'Thomas', type : 'B' },
    { value : 'An', type : 'D' }
];

for(var i = data.length-1; i >= 0; i--){
    if (data[i].type === "A"|| data[i].type === "B") {
        data.splice(i, 1);
    }
}

document.body.innerHTML = JSON.stringify(data);





(另请参见this Fiddle



注意

如果实际上-您可以创建一个新数组并仅复制原始数组数组中的所有值,而无需使用data[i].type === "A"|| data[i].type === "B"删除所有对象,则可以得到更好的性能:



var data = [
    { value : 'Tom', type : 'A' },
    { value : 'Susan', type : 'C' },
    { value : 'Frank', type : 'B' },
    { value : 'Hakeem', type : 'A' },
    { value : 'Ali', type : 'C' },
    { value : 'Thomas', type : 'B' },
    { value : 'An', type : 'D' }
];

var copy = [];
for(var i = 0; i < data.length; i++){
    if (data[i].type !== "A" && data[i].type !== "B") {
        copy.push(data[i]);
    }
}
data = copy;

document.body.innerHTML = JSON.stringify(data);





(另请参见this Fiddle

08-27 22:22
查看更多