让我们说我有一个像这样的对象数组:
var messages = [
{id: 1, replyTo: null}
{id: 5, replyTo: null}
{id: 7, replyTo: null}
{id: 9, replyTo: 7}
{id: 10, replyTo: null}
{id: 12, replyTo: 1}
{id: 16, replyTo: 1}
{id: 20, replyTo: 1}
{id: 24, replyTo: 1}
{id: 28, replyTo: 1}
{id: 32, replyTo: 1}
{id: 36, replyTo: 1}
{id: 40, replyTo: 1}
];
我想从该数组中删除属性ID为1的所有对象,但也要删除1的回复。
我试过这样的事情:
for (var i = 0; i < messages.length; i++) {
if (messages[i].id === 1 || messages[i].replyTo === 1) {
messages.splice(i, 1);
}
}
这不起作用。
我该如何解决这个问题?
答案 0 :(得分:2)
像这样使用filter
var filteredMessages = messages.filter(function(message) {
return message.id !== 1 || message.replyTo !== 1;
});
答案 1 :(得分:0)
您可以使用filter
方法。
在第一次过滤删除所有具有属性id 1的元素时,在第二轮中删除带有replyTo的元素是1
var messages = [
{id: 1, replyTo: null},
{id: 5, replyTo: null},
{id: 7, replyTo: null},
{id: 9, replyTo: 7},
{id: 10, replyTo: null},
{id: 12, replyTo: 1},
{id: 16, replyTo: 1},
{id: 20, replyTo: 1},
{id: 24, replyTo: 1},
{id: 28, replyTo: 1},
{id: 32, replyTo: 1},
{id: 36, replyTo: 1},
{id: 40, replyTo: 1}
];
var newArray = messages.filter(function(item){
return item.id !==1
})
var newArray2 = newArray.filter(function(item){
return item.replyTo !==1;
})
console.log(newArray2);
选中此jsFiddle