【发布时间】:2018-09-06 10:37:52
【问题描述】:
我有两个大型对象数组,例如:
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 几秒钟。
是否有更好的方法来过滤数组,或者我应该查看如何以及何时进行比较?
【问题讨论】:
-
使用普通的老式 for 循环,它总是比使用函数式方法更快。这是边际上的一些优化。无论如何,您无法击败最坏的情况
O(N x M)。一种保存方法是使用Worker API 处理密集型任务。 -
@KarelG 我一定会尝试旧的 for 循环,看看会不会有什么不同
标签: javascript arrays ecmascript-6