按ID加入两个Javascript / JSON对象的最快方法

时间:2017-01-06 12:17:25

标签: javascript json

假设我有两个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
        }
    }
 }

有更快的方法吗?

2 个答案:

答案 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
相关问题