繁体   English   中英

从JavaScript中的数组中删除对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM