Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象操作javascript,将对象的值添加到对象数组中_Javascript_Arrays_Concatenation_Javascript Objects - Fatal编程技术网

对象操作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;
});