对象操作javascript,将对象的值添加到对象数组中
一个例子可以说明问题: 对象数组:对象操作javascript,将对象的值添加到对象数组中,javascript,arrays,concatenation,javascript-objects,Javascript,Arrays,Concatenation,Javascript Objects,一个例子可以说明问题: 对象数组: [{ userId: 'ab4e3870-287e-11e7-b5a1-abb6183e9866', email: 'email1@hotmail.com' },{ userId: 'ae149220-2883-11e7-bbf9-1fb134f2b4ad', email: 'email2@hotmail.com' }] 反对 { 'ab4e3870-287e-11e7-b5a1-abb6183e9866':
[{
userId: 'ab4e3870-287e-11e7-b5a1-abb6183e9866',
email: 'email1@hotmail.com'
},{
userId: 'ae149220-2883-11e7-bbf9-1fb134f2b4ad',
email: 'email2@hotmail.com'
}]
反对
{
'ab4e3870-287e-11e7-b5a1-abb6183e9866': { name: 'john', roles: 'detective'},
'ae149220-2883-11e7-bbf9-1fb134f2b4ad': { name: 'james', roles: 'plumber'},
}
我想要的结果是:
[{
userId: 'ab4e3870-287e-11e7-b5a1-abb6183e9866',
email: 'email1@hotmail.com',
name: 'john',
roles: 'detective'
},{
userId: 'ae149220-2883-11e7-bbf9-1fb134f2b4ad',
email: 'email2@hotmail.com',
name: 'james',
roles: 'plumber'
}]
因此,基本上,与对象中的userId匹配的键的值被添加到数组中的该对象中
有什么我看不到的简单方法吗?ES6中没有外部库
var data = [{
userId: 'ab4e3870-287e-11e7-b5a1-abb6183e9866',
email: 'email1@hotmail.com'
},{
userId: 'ae149220-2883-11e7-bbf9-1fb134f2b4ad',
email: 'email2@hotmail.com'
}]
var d = {
'ab4e3870-287e-11e7-b5a1-abb6183e9866': { name: 'john', roles: 'detective'},
'ae149220-2883-11e7-bbf9-1fb134f2b4ad': { name: 'james', roles: 'plumber'},
};
使用ES6扩展运算符…
ES5:通过手动添加属性
当然,只需迭代数组和对象键,并检查数组对象是否具有与另一个对象键相等的用户ID
data = data.map(function(item) {
return {...item, ...d[item.userId]}
});
data = data.map(function(item) {
item.name = d[item.userId].name;
item.roles = d[item.userId].roles;
return item;
});