data
是一个包含不同类型元素的数组。我想循环遍历此数组并删除类型为A
并键入B
的所有元素。这就是我到目前为止所做的:
for(i=0;i<data.length;i++){
if (i.type === "A"|| i.type === "B") {
data.splice(i, 1);
}
}
即使某些类型为A
或B
,它也不会删除任何内容。
有人可以告诉我为什么这是错的,我应该如何解决它!
提前致谢!
答案 0 :(得分:2)
您的代码实际上有两个错误:
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"
移除所有对象,您实际上会获得更好的性能 - 您只需创建一个新数组,然后只复制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)
答案 1 :(得分:1)
在拼接时循环播放数组是有问题的,而是在这里使用Array.filter:
var filteredData = data.filter(function(d){
return !(i.type === "A"|| i.type === "B");
});