【发布时间】:2015-10-05 18:38:33
【问题描述】:
我从一个包含嵌套对象(约 34,000 个项目)的大数组开始,我每 5 秒轮询一次,接收对数组的更新(通常一次更新 2-3 个),新数组只包含已更改的项目(例如,如果仅更改了 3 个项目,我只会在更新后的数组中获取这 3 个项目。)
我使用下划线尝试了以下操作,但最多需要 9 秒,我需要 1 秒或更短的时间。
getUniqueUnion(new, old) {
return uniq(union(new, old), false, function(item) {
return item.info.id;
});
}
有人对快速方法有建议吗?如果有帮助,唯一键将是 info.id,而我真正想要检测的唯一更改(我需要更新项目的原因)是 inStock 值是否更改。换句话说,如果 inStock 值没有改变,我不需要对该数组项进行任何更新。
示例数组:
const originalData = [
{
info: {
id: 1
},
moreInfo: {
name: 'hamburger',
inStock: true
}
},
... // 33,999 more
]
const updatedData = [
{
info: {
id: 1
},
moreInfo: {
name: 'hamburger',
inStock: false
}
},
... // maybe 2 more
]
所以最终的数组将包含第一个具有 moreInfo.inStock === false 的项目
【问题讨论】:
-
如果您知道需要更新的条目的
id,则应查找该id,然后仅更新该条目,而不是重写整个数组 -
id 是连续的吗?它们是从 1 开始到 34000,还是更随机?
-
我想我过于复杂了,我可以在 for 循环中使用 for 循环并更改该条目,而不是重写,谢谢@HunterMcMillen。
-
所以,这是你的情况:首先,你有
originalData。您通过投票获得updatedData。现在,您想根据来自updatedData的新数据更新originalData中的数据。对吗?
标签: javascript arrays performance