data
是一个包含不同类型元素的数组。我想遍历此数组并删除所有类型为A
和B
的元素。这是我到目前为止所拥有的:
for(i=0;i<data.length;i++){
if (i.type === "A"|| i.type === "B") {
data.splice(i, 1);
}
}
即使某些类型为
A
或B
,它也不会删除任何内容。有人可以告诉我为什么这是错误的,我应该如何解决!
提前致谢!
最佳答案
问题
您的代码中实际上有两个错误:
您正在向前循环。如果要在遍历数组元素时拼接一个数组,则需要向后循环。i.type
应该是data[i].type
。 i
只是一个数字,甚至没有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)