javascript - 在javascript中合并两个数组,如果id相同,则使用lodash选择第二个数组上的一个

标签 javascript lodash

我想用 lodash 将两个数组组合在一起,但有一个问题。如果项目具有相同的 id,则从第二个数组中选择一个。 示例:

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}];

任何想法,如何实现这一目标。给我一些想法。预先感谢您。

最佳答案

在纯 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; }

关于javascript - 在javascript中合并两个数组,如果id相同,则使用lodash选择第二个数组上的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573289/

相关文章:

javascript - 如何将文本文件中的值保存到数组中?

javascript - 为什么我的 Sprite /实体不能直线移动?

javascript - 从列表中返回对象的更简洁的方法

javascript - Lodash 帮助使用搜索词和多个属性名称进行过滤

javascript - Lodash _.chain 使用展平来查找匹配值数组

javascript - 在javascript中订购带有多个点的字符串

JavaScript 对象创建/关联性

javascript - D3 隐藏图表区域的溢出,当Y轴有最小值和最大值时

javascript - 如何使用 lodash 使用另一个具有 bool 值的数组对数组进行子集化

javascript - 动态添加的指令没有响应