tes*_*123 1 javascript arrays object lodash
我有2个对象数组,它们各有一个id共同点.如果它们具有匹配的ids ,我需要将数组2的对象添加到对象数组1中的属性.
数组1:
[
{
id: 1,
name: tom,
age: 24
},
{
id: 2,
name: tim,
age: 25
},
{
id: 3,
name: jack,
age: 24
},
]
Run Code Online (Sandbox Code Playgroud)
数组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
},
]
Run Code Online (Sandbox Code Playgroud)
期望的结果:
[
{
id: 1,
name: tom,
age: 24,
eyeColour: blue,
},
{
id: 2,
name: tim,
age: 25,
eyeColour: green,
},
{
id: 3,
name: jack,
age: 24,
eyeColour: hazel,
},
]
Run Code Online (Sandbox Code Playgroud)
我尝试使用lodash _.merge函数但是当我只想eyeColour添加时,我最终将所有属性放入一个数组中.
小智 6
Lodash仍然是一个非常有用的实用程序包,但随着ES6的出现,它的一些用例不太引人注目.
对于第一个数组中的每个对象(person),在第二个数组中找到具有匹配ID的对象(请参阅函数findPerson).然后将两者合并.
function update(array1, array2) {
var findPerson = id => array2.find(person => person.id === id);
array1.forEach(person => Object.assign(person, findPerson(person.id));
}
Run Code Online (Sandbox Code Playgroud)
对于非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});
});
}
Run Code Online (Sandbox Code Playgroud)