[英]Removing objects from an array in javascript
我有这个包含简单对象的数组
var data = [
{type:1, owner:"jason"},
{type:1, owner:"john"},
{type:2, owner:"jason"},
{type:2, owner:"alice"},
{type:2, owner:"bob"},
{type:2, owner:"clark"},
{type:1, owner:"david"}
]
我试图遍历数组并仅删除type:1的元素。 这就是我尝试过的。
for(var i = 0; i < data.length; i++){
if(data[i].type === 1){
data.splice(i,1)
}
}
我认为在该循环运行之后将所有类型1元素从数组中删除会是愚蠢的。 在chrome开发工具中运行此命令后,该数组仍包含{type:1,owner:“ jason”},并且所有type:2都保持不变。 我究竟做错了什么?
拼接后你只需要减小i
i--;
顺便说一句,我想只使用过滤器并将结果分配给相同的data
变量,例如波纹管
data = data.filter(function(obj) {
return obj.type !== 1;
})
console.log(data);
您应该在拼接后运行i--,因为拼接会调整数组的大小,所以删除后数组索引会立即更改。
for(var i = 0; i < data.length; i++){
if(data[i].type === 1){
data.splice(i,1);
i--;
}
}
每当您拼接var数据时,请将i减1。 因为这意味着对象的数组列表越来越小,所以索引位置发生了变化。
因为您没有减少1,所以从位置0的jason开始,然后直接跳至位置2的jason。为什么会这样? 由于您在开始时就对对象进行了切片,因此索引位置会像这样移动。
第一循环:i = 0
var data = [
{type:1, owner:"jason"},//position 0
{type:1, owner:"john"},//position 1
{type:2, owner:"jason"},//position 2
{type:2, owner:"alice"},//position 3
{type:2, owner:"bob"},//position 4
{type:2, owner:"clark"},//position 5
{type:1, owner:"david"}//position 6
]
第二循环i = 1
var data = [
{type:1, owner:"jason"},//SPLICED
{type:1, owner:"john"},// position 0
{type:2, owner:"jason"}, //position 1
{type:2, owner:"alice"},// position 2
{type:2, owner:"bob"},//position 3
{type:2, owner:"clark"},//position 4
{type:1, owner:"david"}//position 5
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.