我在Node.js中有两个JSON数组。

var a = [{id: 1, name: 'A'}, {id: 2, name: 'B'}, {id: 3, name: 'C'}, {id: 4, name: 'D'}];

var b = [{id: 1, marks: 80}, {id: 2, marks: 30}, {id: 3, marks: 76}];

我想合并这些数组,匹配id值。请提出一种有效的方法,因为数组包含大约25000个记录。

所需输出:

var o = [{id: 1, name: 'A', marks: 80}, {id: 2, name: 'B', marks: 30}, {id: 3, name: 'C', marks: 76}, {id: 4, name: 'D'}];

谢谢。

最佳答案

你应该做一个索引对象

const indexB = b.reduce( ( result, item ) => {
    result[item.id] = item;
    return result;
}, {});

var mergedArr = a.map( item => Object.assign( item, indexB[item.id] ) );


在我的基准测试中,下划线方法和我的方法有很大的不同:

λ ~/Projects/_tests/performance ◆ time node a.js
node a.js  44.36s user 0.38s system 98% cpu 45.216 total
λ ~/Projects/_tests/performance ◆ time node b.js
node b.js  0.10s user 0.02s system 95% cpu 0.118 total


下划线是a.js。

关于arrays - 通过匹配Node.js中的属性来合并JSON数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39844558/

10-10 00:39
查看更多