我有 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/