假设我有两个Javascript Objects
(他们有JSON
结构,但是使用JSON.parse()
创建。所有条目都具有唯一的ID
,可以使用这两个条目匹配两个对象的条目。
加入这两个对象的最快方法是什么(本地javascript
)。
我想到的第一件事就是嵌套for in loop
。
for(var i in firstJson) {
for(var j in secondJson) {
if(firstJson[i].id === secondJson[j].id) {
// join them
}
}
}
有更快的方法吗?
答案 0 :(得分:4)
更有效的方法是从其中一个创建索引:
var index = {};
for (var j in secondJson) {
var obj = secondJson[j];
index[obj.id] = obj;
};
for (var i in firstJson) {
var firstObj = firstJson[i];
var match = index[firstObj.id];
if (match) {
// do the stuff
}
};
对于嵌套循环,这是O(n+m)
而不是O(n*m)
。当然以O(m)
记忆为代价。
答案 1 :(得分:0)
如果两个列表尚未排序,您可以先按ID排序,然后进行比较并保存最后找到的对象的位置,如果找不到任何内容,则从最后找到的对象开始。
(我相信奇怪的解决方案更快,但这没有额外的内存消耗)
这应该是订单O(n log(n)+ m log(m)+ m)
main