【发布时间】:2019-12-16 08:22:34
【问题描述】:
我有 2 组非常大的数据,由于我的环境的限制,我需要在客户端进行比较。
对应的对象数组的大小每个都超过 450k,我一直在测试不同的方法来比较它们(For 循环、.find、.indexOf、.reduce、$.grep)并且它们都运行得很慢(每分钟大约 700 次计算)。
检查包括找出一个数组中的每个对象是否已经包含在另一个数组中,例如:
var Arr1 = [{ID:2, Name: Bar}, {ID:1, Name: Foo}]
var Arr2 = [{ID:2, Name: Fu}, {ID:2, Name: Bar}]
如果 Arr2 中的任何对象被任何属性包含在第一个对象中,在这种情况下 (Arr2[1].Name == Arr1[0].Name)?将返回true
在这种情况下,我会将其推送到我们可以命名的新对象数组 Found:Found.push(Arr1[0])
我当然需要对数组中的所有 400k+ 对象执行此检查,所以它会变得非常慢。
我知道我的请求中有几个“但是”,例如可用 RAM 和处理器速度,但假设环境完美,最快的方法是什么?
【问题讨论】:
-
你能举一个输入和预期输出的例子吗?
-
只是好奇,您需要将这些数组保持为 400k+ 还是可以将它们分解为一些更小的逻辑分组?我也很好奇你的环境有什么限制......服务器端的一些预处理可能真的有帮助。
-
我认为你的任务是后端方面
-
是的,请给我一分钟,我可以得到一些样本数据。至于其他问题,我正在处理直接来自我客户数据库的提取物,他们拒绝在他们这边执行任何更改以减少我的负载,我无法在中间设置另一个数据库来帮助解决这个问题,因为经济限制。是的,我们可以根据需要将数组分成任意多的块,我尝试将它们分开,但结果与整个过程几乎相同。
-
只是一个附带的问题:数据是来自服务器还是在客户端生成?如果是这样,元素是否已经订购?这是您唯一可以获得的格式吗?
标签: javascript arrays performance object compare