我希望能够通过另一个对象数组来过滤对象数组。
我有两个对象数组,如下所示:
const array = [
{ id: 1, name: 'a1', sub: { id: 6, name: 'a1 sub' } },
{ id: 2, name: 'a2', sub: null },
{ id: 3, name: 'a3', sub: { id: 8, name: 'a3 sub' } },
{ id: 4, name: 'a4', sub: null },
{ id: 5, name: 'a5', sub: { id: 10, name: 'a5 sub' } },
];
const anotherArray = [
{ id: 1, name: 'a1', sub: { id: 6, name: 'a1 sub' } },
{ id: 2, name: 'a2', sub: null },
{ id: 5, name: 'a5', sub: { id: 10, name: 'a5 sub' } },
];
我希望筛选array
中不在anotherArray
中且包含子元素的项。
所以我期望的输出是:
[ { id: 3, name: 'a3', sub: { id: 8, name: 'a3 sub' } ]
注意:我已经用 for 循环做了这个,但它运行得太慢了。我想使用数组的 filter 方法来完成这个任务。
我用 for 循环写的代码如下:
for (let i = 0; i < array.length; i += 1) {
let exist = false;
const item = array[i];
for (let j = 0; j < anotherArray.length; j += 1) {
const anotherItem = anotherArray[j];
if (item.id === anotherItem.id) {
exist = true;
}
}
if (item.sub && !exist) {
this.newArray.push({
text: `${item.sub.name} / ${item.name}`,
value: item.id,
});
}
}
Array#filter
也会在数组上迭代,但是在内部操作。天真地将for
循环转换成.filter
很可能不能使你的代码更快。请发布你的代码。 - Felix Kling