我有2个列表对象,需要从包含ListB的ListA中删除所有项目,并返回其余的项目。我的方法如下:
列表A
[{
"id": 1,
"name": "ant"
}, {
"id": 2,
"name": "ant2"
}, {
"id": 3,
"name": "ant3"
}, {
"id": 4,
"name": "ant3"
}, {
"id": 5,
"name": "ant3"
}]
列表B
[{
"id": 1,
"name": "ant"
}, {
"id": 4,
"name": "ant4"
}, {
"id": 3,
"name": "ant3"
} ]
我尝试过的事情:
const xxx = this.listA.filter(x => !listB.includes(x) != null);
注意(替代方案):当存在2个相同的List时,预期结果为[]。但是,就我而言,它与单个列表相同。
答案 0 :(得分:2)
您在这里:)
const listBSerialized = listB.map(x => JSON.stringify(x))
const xxx = listA.filter(x => !listBSerialized.includes(JSON.stringify(x)));
您将得到以下结果:
[ { id: 2, name: 'ant2' },
{ id: 4, name: 'ant3' },
{ id: 5, name: 'ant3' } ]
您还可以在需要序列化时需要属性顺序保证的情况下使用模型,有时对象可以具有相同的属性,但顺序不同(取决于对象来自何处):
function Ant(id, name) {
this.id = id
this.name = name
}
listA = [
new Ant(1, "ant"),
new Ant(2, "ant2"),
new Ant(3, "ant3"),
new Ant(4, "ant3"),
new Ant(5, "ant3")
]
listB = [
new Ant(1, "ant"),
new Ant(4, "ant4"),
new Ant(3, "ant3")
]
const listBSerialized = listB.map(x => JSON.stringify(x))
const xxx = listA.filter(x => !listBSerialized.includes(JSON.stringify(x)));
答案 1 :(得分:1)
这是一个可以完成此任务的简单班轮:
const xxx = listA.filter(base => ! listB.some(f => f.id === base.id && f.name === base.name))
其中a
是ListA,而b
是对象的ListB数组。基本上,您要做的就是过滤a
数组,条件是b
数组中没有对象具有相同的ID和名称。