javascript - 有效地比较两个大型对象数组并找出差异
问题描述
我有两个大型对象数组,例如:
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;
});
});
这可行,但它会阻止我的应用程序的用户界面几秒钟。
有没有更好的方法来过滤数组,或者我应该查看如何以及何时进行这种比较?
解决方案
您可以采取Set
并检查是否过滤了第一个数组。
const
ids = new Set(array2.map(({ id }) => id)),
missing = array1.filter(({ id }) => !ids.has(id));
推荐阅读
- java - Lombok 扩展方法:流行/优先级?
- django - Django 石墨烯订阅不断加载而不向我发送数据
- appsflyer - AppsFlyer 始终为 Android 发送邀请归因数据
- python - 从 html 中抓取的文本
- node.js - 如何向特定用户 socket.io 发送消息
- python - 在单独的 Spark 数据框中读取不同文件夹中的多个 json 文件
- c# - WPF 组合框选择名称使用 ID
- java - 动态代理的 javassist.CannotCompileException
- python - 使用 Python 测试链接
- javascript - 如何使用 POST 方法修复 net::err_aborted 415?