javascript - 根据属性值将对象数组中的属性合并到另一个对象数组中 lodash

标签 javascript arrays object lodash

我有 2 个对象数组,它们每个都有一个共同的 id。我需要将数组 2 的对象的属性添加到对象数组 1,如果它们具有匹配的 id

数组 1:

[
    {
        id: 1,
        name: tom,
        age: 24
    },
    {
        id: 2,
        name: tim,
        age: 25
    },
    {
        id: 3,
        name: jack,
        age: 24
    },

]

数组 2:

[
    {
        id: 1,
        gender: male,
        eyeColour: blue,
        weight: 150
    },
    {
        id: 2,
        gender: male,
        eyeColour: green,
        weight: 175
    },
    {
        id: 3,
        gender: male,
        eyeColour: hazel,
        weight: 200
    },

]

期望的结果:

[
    {
        id: 1,
        name: tom,
        age: 24,
        eyeColour: blue,
    },
    {
        id: 2,
        name: tim,
        age: 25,
        eyeColour: green,
    },
    {
        id: 3,
        name: jack,
        age: 24,
        eyeColour: hazel,
    },

]

我尝试使用 lodash _.merge 函数,但最终我将所有属性都放入一个数组中,而我只想添加 eyeColour

最佳答案

Lodash 仍然是一个非常有用的实用程序包,但随着 ES6 的出现,它的一些用例不那么引人注目了。

对于第一个数组中的每个对象(人),在第二个数组中找到具有匹配 ID 的对象(参见函数 findPerson)。然后合并两者。

function update(array1, array2) {
  var findPerson = id => array2.find(person => person.id === id);

  array1.forEach(person => Object.assign(person, findPerson(person.id));
}

对于非 ES6 环境,使用传统语法重写箭头函数。如果 Array#find 不可用,请编写您自己的或使用一些等效的。对于 Object.assign,如果您更喜欢使用自己的等效项,例如 _.extend

这会将所有属性从 array2 合并到 array1 中。只合并 eyeColour:

function update(array1, array2) {
  var findPerson = id => array2.find(person => person.id === id);

  array1.forEach(person => {
    var person2 = findPerson(person.id));
    var {eyeColour} = person2;
    Object.assign(person, {eyeColour});
  });
}

关于javascript - 根据属性值将对象数组中的属性合并到另一个对象数组中 lodash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34795049/

相关文章:

javascript - Firefox 扩展 -> 获取显示选项卡的内容

javascript - 此 JavaScript 代码能否可靠地区分相对 URL 和绝对 URL?

javascript - ESRI JavaScript API - 从 LocateButton 小部件返回坐标?

javascript - 使用相同的触发器取消绑定(bind)两个 jQuery 函数之一?

c++ - 二维数组的数组

java - 如何引用在不同类的 main 方法中声明的对象的属性

arrays - 计算最大偶数成本子数组

java - 如何访问位于父类(super class)数组中的另一个对象内部的对象数组?

Javascript:使对象无效时不会删除 setInterval

javascript - 属性声明中无法进行数学运算?