Javascript 将阵列合并到一个阵列

Javascript 将阵列合并到一个阵列,javascript,arrays,concat,reduce,Javascript,Arrays,Concat,Reduce,假设我有以下数组,我如何通过修改给定的reduce函数来实现这个问题中最后一个给定的示例 我尝试将[cur]分配给一个plans键,但它只输出第一个元素 我有一种感觉,这与我观察物体的方式有关,但我自己无法理解 { employee: 'employee_1', customer: { name: 'customer_1', }, startdate: '2020-03-01T23:00:00.000Z' }, { employee: 'employee_

假设我有以下数组,我如何通过修改给定的reduce函数来实现这个问题中最后一个给定的示例

我尝试将[cur]分配给一个plans键,但它只输出第一个元素

我有一种感觉,这与我观察物体的方式有关,但我自己无法理解

{
   employee: 'employee_1',
   customer: {
     name: 'customer_1',
   },
   startdate: '2020-03-01T23:00:00.000Z'
}, {
   employee: 'employee_2',
   customer: {
     name: 'customer_1',
   },
   startdate: '2020-03-01T23:00:00.000Z'
}, {
   employee: 'employee_3',
   customer: {
     name: 'customer_1',
   },
   startdate: '2020-03-01T23:00:00.000Z'
}
这会将给定的数组缩减为如下所示:

{
   customer: {
     name: 'customer_1'
   },
   employee: [{
     employee: 'employee_1'
   }, {
     employee: 'employee_2'
   }, {
     employee: 'employee_3'
   }],
   startdate: [{
     startdate: '2020-03-01T23:00:00.000Z'
   }, {
     startdate: '2020-03-01T23:00:00.000Z'
   }, {
     startdate: '2020-03-01T23:00:00.000Z'
   }]  
}
{
   customer: {customer_data},
   plans: [{
     employee: 'employee_1',
     startdate: '2020-03-01T23:00:00.000Z' 
   }, {
     employee: 'employee_2',
     startdate: '2020-03-01T23:00:00.000Z' 
   }, {
     employee: 'employee_3',
     startdate: '2020-03-01T23:00:00.000Z' 
   }]
}
但我需要的是这样的东西:

{
   customer: {
     name: 'customer_1'
   },
   employee: [{
     employee: 'employee_1'
   }, {
     employee: 'employee_2'
   }, {
     employee: 'employee_3'
   }],
   startdate: [{
     startdate: '2020-03-01T23:00:00.000Z'
   }, {
     startdate: '2020-03-01T23:00:00.000Z'
   }, {
     startdate: '2020-03-01T23:00:00.000Z'
   }]  
}
{
   customer: {customer_data},
   plans: [{
     employee: 'employee_1',
     startdate: '2020-03-01T23:00:00.000Z' 
   }, {
     employee: 'employee_2',
     startdate: '2020-03-01T23:00:00.000Z' 
   }, {
     employee: 'employee_3',
     startdate: '2020-03-01T23:00:00.000Z' 
   }]
}

我修改了您的解决方案以获得所需的输出

您应该使用find方法检查阵列中是否已经存在客户,而不是使用reduce。 另外,你没有考虑计划数组,我补充说

var计划=[
{
雇员:“雇员1”,
客户:{
名称:“客户_1”,
},
起始日期:“2020-03-01T23:00:00.000Z”
}, {
雇员:“雇员2”,
客户:{
名称:“客户_1”,
},
起始日期:“2020-03-01T23:00:00.000Z”
}, {
雇员:“雇员3”,
客户:{
名称:“客户_1”,
},
起始日期:“2020-03-01T23:00:00.000Z”
}
];
var结果=计划.减少(功能(o,cur){
//获取键值对的索引。
var occurs=o.find(ob=>ob.customer.name==cur.customer.name);
//如果找到该名称,
如果(发生){
//将当前值附加到其值列表中。
发生.plans.push({employee:cur.employee,
startdate:cur.startdate})
//否则
}否则{
//将当前项添加到o(但确保该值为数组)。
var obj={
客户:cur.customer,
计划:[
{雇员:当前雇员,
startdate:cur.startdate}
]
};
o=o.concat(obj);
}
返回o;
}, [])

console.log(result)
我修改了您的解决方案以获得所需的输出

您应该使用find方法检查阵列中是否已经存在客户,而不是使用reduce。 另外,你没有考虑计划数组,我补充说

var计划=[
{
雇员:“雇员1”,
客户:{
名称:“客户_1”,
},
起始日期:“2020-03-01T23:00:00.000Z”
}, {
雇员:“雇员2”,
客户:{
名称:“客户_1”,
},
起始日期:“2020-03-01T23:00:00.000Z”
}, {
雇员:“雇员3”,
客户:{
名称:“客户_1”,
},
起始日期:“2020-03-01T23:00:00.000Z”
}
];
var结果=计划.减少(功能(o,cur){
//获取键值对的索引。
var occurs=o.find(ob=>ob.customer.name==cur.customer.name);
//如果找到该名称,
如果(发生){
//将当前值附加到其值列表中。
发生.plans.push({employee:cur.employee,
startdate:cur.startdate})
//否则
}否则{
//将当前项添加到o(但确保该值为数组)。
var obj={
客户:cur.customer,
计划:[
{雇员:当前雇员,
startdate:cur.startdate}
]
};
o=o.concat(obj);
}
返回o;
}, [])

console.log(result)
如何获得最后一个给定的结果查看所需的输出,看起来您并不是真的想要获得最后一个给定的结果,而是一组
客户
,不是吗?是的,这就是我试图实现的ps:编辑问题以更好地理解输入,imho,仍然很不清楚。我仍然会尽力帮助你,也许这可以给你一些想法:谢谢你,它是有效的,但是有另一个答案,帮助了我很多!谢谢你,布斯!接受下面的答案,希望你能从两者中学到一些东西;)如何实现上一个给定的结果查看所需的输出,看起来您并不是真的想要实现上一个给定的结果,而是一个由
客户
组成的小组,不是吗?是的,这就是我试图实现的。ps:编辑问题以更好地理解输入,imho,仍然很不清楚。我仍然会尽力帮助你,也许这可以给你一些想法:谢谢你,它是有效的,但是有另一个答案,帮助了我很多!谢谢你,布斯!接受下面的答案,希望你能从两者中学到一些东西;)