如果id相同,在javascript中组合两个数组,用lodash在第2个数组中选择一个

时间:2017-04-23 15:52:47

标签: javascript lodash

我想将两个数组与 lodash 结合起来,但有一个问题。如果item具有相同的id,请从第2个数组中选择一个。 示例:

let arr1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}];
let arr2 = [{ id: 3, name: 'name3', score: 1}];

预期结果

[{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3', score: 1}];

任何想法,如何实现这一目标。拍我一些想法。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在普通的Javascript中,您可以使用Map并检查是否存在第二个数组的项目,然后从第一个数组中取出第二个数据中的项目。

let array1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}],
    array2 = [{ id: 3, name: 'name3', score: 1}],
    map2 = new Map(array2.map(a => [a.id, a])),
    result = array1.map(a => map2.get(a.id) || a);
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES5,对象为哈希表。

var array1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}],
    array2 = [{ id: 3, name: 'name3', score: 1}],
    map2 = array2.reduce(function (r, a) {
        r[a.id] = a;
        return r;
    }, Object.create(null)),
    result = array1.map(function (a) {
        return map2[a.id] || a;
    });
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }