有效地比较两个大的对象数组并找出差异

问题描述 投票:5回答:1

我有两大类对象,如:

const array1 = [
    {
        userId: 83232932,
        name: 'Tom',
        profile_pic: 'http://..',
        age: 24,
        gender: 'F'
    },
    {
        userId: 2413535,
        name: 'Sam',
        profile_pic: 'http://..',
        age: 31,
        gender: 'M'
    }
]

和另一个几乎相同的阵列。

这两个数组也可以有数千个对象,例如20k。

我必须比较它们并找到第一个数组中的对象而不是第二个数组中的对象

现在我在做:

const missing = array1.filter(function(item1) {
    return !array2.some(function(item2) {
        return item1.userId === item2.userId;
    });
});

这可行,但它会阻止我的应用程序的UI几秒钟。

有没有更好的方法来过滤数组或者我应该检查如何以及何时进行此比较?

javascript arrays ecmascript-6
1个回答
6
投票

你可以拿一个Set并检查过滤第一个数组。

const
    ids = new Set(array2.map(({ id }) => id)),
    missing = array1.filter(({ id }) => !ids.has(id));
© www.soinside.com 2019 - 2024. All rights reserved.