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

标签 javascript arrays ecmascript-6

我有两个大型对象数组,例如:

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 几秒钟。

是否有更好的方法来过滤数组,或者我应该回顾如何以及何时进行这种比较?

最佳答案

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

const
    ids = new Set(array2.map(({ id }) => id)),
    missing = array1.filter(({ id }) => !ids.has(id));

关于javascript - 有效地比较两个大型对象数组并找出差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52202183/

相关文章:

javascript - 我的列表的下一个和上一个按钮不起作用

java - 返回包含字符串形式整数的字符串数组,用文本字符串替换某些数字的倍数

javascript - 将对象数组转换为对象

javascript - 在哪里放置谷歌标签管理器标签片段在 Angular 中?

javascript - ag-grid 不显示嵌套的 json

javascript - jQuery 如何在父节点上使用额外的选择条件?

javascript - 如何在Sequelize中使用belongsToMany?

php - 在 Aptana 3 上调试 PHP/JS 时出现“套接字连接错误”

java - 如何拥有一个由数组 : Java? 索引的数组

javascript - 无法使用 webpack 和 redux-react 获取模拟