Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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 - Fatal编程技术网

Javascript 按键组合两个对象数组,并将第二个数组的值推送到第一个数组中的新数组中

Javascript 按键组合两个对象数组,并将第二个数组的值推送到第一个数组中的新数组中,javascript,arrays,Javascript,Arrays,我需要一个包含两个数组的数据的结果数组。如果名称相同,则将第二个数组的值添加到第一个数组的数组中。最好的方法是什么 var array1 = [ {name: "name1", type: "type"}, {name: "name2", type: "type"}, {name: "name3", type: "type"} ] var array2 = [ {name: "name1", value: "value1"}, {name: "name2", value:

我需要一个包含两个数组的数据的结果数组。如果名称相同,则将第二个数组的值添加到第一个数组的数组中。最好的方法是什么

var array1 = [
  {name: "name1", type: "type"},
  {name: "name2", type: "type"},
  {name: "name3", type: "type"}
]

var array2 = [
  {name: "name1", value: "value1"},
  {name: "name2", value: "value2"},
  {name: "name2", value: "value3"},
  {name: "name2", value: "value4"}
]

var result = [
  {name: "name1", type: "type", values: [
    "value1"
  ]},
  {name: "name2", type: "type", values: [
    "value2",
    "value3",
    "value4"
  ]},
  {name: "name3", type: "type", values:[]}
]

基于ES6阵列的单线解决方案。原型和方法等:

以及不带spread运算符但带ES6的版本:

以下是我的方法(注意它修改了
array1
):

var数组1=[
{name:“name1”,type:“type”},
{name:“name2”,type:“type”},
{name:“name3”,type:“type”}
]
变量array2=[
{name:“name1”,value:“value1”},
{name:“name2”,value:“value2”},
{name:“name2”,value:“value3”},
{name:“name2”,value:“value4”}
]
var result=array1.map(项=>{
item.values=array2
.filter(x=>x.name==item.name)
.map(x=>x.value)
退货项目
})

console.log(result)
您可以使用Array.prototype.map()、Array.prototype.filter()和ES6 spread操作符来完成这项任务

var数组1=[
{name:“name1”,type:“type”},
{name:“name2”,type:“type”},
{name:“name3”,type:“type”}
]
变量array2=[
{name:“name1”,value:“value1”},
{name:“name2”,value:“value2”},
{name:“name2”,value:“value3”},
{name:“name2”,value:“value4”}
]
让result=array1.map(item1=>({
…第1项,
数值:array2
.filter(item2=>item2.name===item1.name)
.map(item2=>item2.value)
}));

控制台日志(结果)这将为您提供除空数组(其中名称为
name3
)之外的所有内容,您可以通过循环数组1的每个元素并添加空数组来轻松添加此内容

var数组1=[
{name:“name1”,type:“type”},
{name:“name2”,type:“type”},
{name:“name3”,type:“type”}
];
变量array2=[
{name:“name1”,value:“value1”},
{name:“name2”,value:“value2”},
{name:“name2”,value:“value3”},
{name:“name2”,value:“value4”}
];
for(设i=0;i控制台日志(array1)欢迎使用堆栈溢出!所有已发布的内容都是程序说明。然而,我们需要你去。我们不能确定你想从我们这里得到什么。请在您的帖子中加入我们可以回答的有效问题。提醒:确保您知道,要求我们为您编写程序和建议是离题的。
const result = array1.map(a1 => ({...a1, values: 
  array2.reduce((r, a2) => a2.name === a1.name ? [...r, a2.value] : r, [])
}));
const result = array1.map(a1 => Object.assign({}, a1, { values: 
  array2.reduce((r, a2) => a2.name === a1.name ? r.push(a2.value) && r : r, [])
}));