迭代JavaScript对象并删除数组

时间:2017-02-17 14:58:56

标签: javascript

我有这样的对象:

{cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 3}],[{id: 4}] ]

我想从对象中删除id:3并尝试这个:

        for (let key in _tempCards.cards) {

            if (_tempCards.cards[key].id === 3)
                delete _tempCards.cards[key];

    }

对象应该看起来像这样

{cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 4}] ]

如何删除对象的这一部分?

3 个答案:

答案 0 :(得分:3)

必须稍微重构一下你的物体才能使它发挥作用。

var _tempCards = {
  cards: [
    [{
      id: 1
    }],
    [{
      id: 2
    }],
    [{
      id: 3
    }],
    [{
      id: 4
    }]
  ]
}

for (var i = 0; i < _tempCards.cards.length; i++) {
  if (_tempCards.cards[i][0].id == 3) {
    _tempCards.cards.splice(i, 1);
  }
}

console.log(_tempCards);

答案 1 :(得分:1)

您提供的代码 不是对象 ,无论您如何看待它。

{cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 3}],[{id: 4}] ]

让我们分解一下:

  1. 您打开一个对象,但从不关闭它。好吧,让我们把它关闭......   {cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 3}],[{id: 4}] ]}

  2. 现在你(有点)有一个对象,第一个属性(cards)包含一个包含单个对象的数组:[{id:1}],而不是 a一堆没有键的其他属性 ,与cards处于同一级别,它们不在父对象的cards属性中,因为我相信你的意图。 ..

  3. ...您还在最后一个无密钥属性后关闭了一个数组,我不知道您从哪里开始(/打算开始但忘了),所以我必须删除它才能获得有效的对象。

  4. 我最好猜测你的物体应该是什么样的:

    { cards: [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 } ] }
    

    或者,美化......

    Object = {
      cards: [{
        id: 1
      },
      {
        id: 2
      },
      {
        id: 3
      },
      {
        id: 4
      }]
    }
    

    现在cards Object属性中有一个对象数组。另一个可能的数据结构是

    cards: [ [{ id: 1 }], [{ id: 2 }], [{ id: 3 }], [{ id: 4 }] ]
    

    这被认为是最有可能存在数据的@KindUser结构。

    结论:,很明显你的目标是&#34; man made&#34;。而且这是错误的。您可以使用工具来验证和可视化您的数据(搜索&#34; JSON查看器&#34;,&#34;美化js&#34;等...)或者您更加关注您的数据。做的。

答案 2 :(得分:0)

_tempCards.cards=_tempCards.cards.filter(function(arr){
    return arr[0].id!==3;//allow every arrays first element, that hasnt an id of 3
});

您可以使用cool Array.prototype.filter来过滤您的数组。您的代码基本上可以工作,但您必须考虑到,您的数组包含包含对象的数组。

for (let key in _tempCards.cards) {
    if (_tempCards.cards[key][0].id === 3)
            delete _tempCards.cards[key];
    }
}