【发布时间】:2019-05-05 07:05:12
【问题描述】:
我想用另一个对象数组过滤对象数组。
我有 2 个这样的对象数组:
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' } },
];
我想通过anotherArray 过滤array 并返回 anotherArray 中不存在且具有子项的项目。
所以我想要的输出是:
[ { id: 3, name: 'a3', sub: { id: 8, name: 'a3 sub' } ]
注意:我已经使用 for 循环完成了此操作,但运行速度太慢。我想使用数组过滤方法来做到这一点
我的 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可能不会使您的代码更快。请发布您的代码。
标签: javascript arrays filter