第一个对象{array},我要过滤的那个:
const object1 = {
"count" : 2,
"result" : [
{ "id": 1 },
{ "id": 2 }
]
}
第二个数组:
const array2 = [{
"id": 1,
"id": 44
}]
如果object1.result
等于object.result[i].id
,我想过滤第一个数组array2[i].id
(或创建一个除此之外的新数组),减少数组计数{{1基于过滤元素的数量。
object1.count
答案 0 :(得分:1)
const object1 = {
count: 2,
result: [
{ id: 1 },
{ id: 2 },
],
};
const array2 = [
{ id: 1 },
{ id: 4 },
];
const filteredResult = object1.result.filter(({ id }) => !array2.find(x => x.id === id));
const object3 = {
count: filteredResult.length,
result: filteredResult,
};
console.log(object3);

{ id }
语法为destructuring assignment。
您还可以使用reduce()
:
const object1 = {
count: 2,
result: [
{ id: 1 },
{ id: 2 },
],
};
const array2 = [
{ id: 1 },
{ id: 4 },
];
const object3 = object1.result.reduce(
({ count, result }, { id }) => array2.find(x => x.id === id)
? ({ count, result })
: ({ count: count + 1, result: result.concat([{ id }]) }),
{ count: 0, result: [] },
);
console.log(object3);

答案 1 :(得分:1)
您可以使用Set
全部收集id
进行过滤。
var object = { count : 2, result : [{ id: 1 }, { id: 2 }] },
array = [{ id: 1 }, { id: 44 }],
ids = new Set(array.map(({ id }) => id));
object.result = object.result.filter(({ id }) => ids.has(id));
object.count = object.result.length;
console.log(object);
减少计数的方法。
var object = { count : 2, result : [{ id: 1 }, { id: 2 }] },
array = [{ id: 1 }, { id: 44 }],
ids = new Set(array.map(({ id }) => id));
object.result = object.result.filter(({ id }) => ids.has(id) || !object.count--);
console.log(object);