我有这样的对象:
{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}] ]
如何删除对象的这一部分?
答案 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}] ]
让我们分解一下:
您打开一个对象,但从不关闭它。好吧,让我们把它关闭......
{cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 3}],[{id: 4}] ]}
现在你(有点)有一个对象,第一个属性(cards
)包含一个包含单个对象的数组:[{id:1}]
,而不是 a一堆没有键的其他属性 ,与cards
处于同一级别,它们不在父对象的cards
属性中,因为我相信你的意图。 ..
...您还在最后一个无密钥属性后关闭了一个数组,我不知道您从哪里开始(/打算开始但忘了),所以我必须删除它才能获得有效的对象。
我最好猜测你的物体应该是什么样的:
{ 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];
}
}