Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 使用reduce函数将数组汇总为对象_Javascript_Arrays_Reduce - Fatal编程技术网

Javascript 使用reduce函数将数组汇总为对象

Javascript 使用reduce函数将数组汇总为对象,javascript,arrays,reduce,Javascript,Arrays,Reduce,我的任务是汇总500多个其他数组。以下是var列表 var列表=[ [ “MIKE”,//员工优先 “NGUYEN”,//最后一名员工 123,//id “Sandra M.,//主管姓名 “桑德拉。m@email.com“//主管电子邮件 ], [ “MYA”, “车道”, 456, “约翰A”, “约翰。a@email.com" ], [ “罗恩”, “主人”, 789, “约翰A”, “约翰。a@email.com" ], [ “迈克”, “阮”, 123, “桑德拉·M.”, “桑德拉。

我的任务是汇总500多个其他数组。以下是
var列表

var列表=[
[
“MIKE”,//员工优先
“NGUYEN”,//最后一名员工
123,//id
“Sandra M.,//主管姓名
“桑德拉。m@email.com“//主管电子邮件
],
[
“MYA”,
“车道”,
456,
“约翰A”,
“约翰。a@email.com"
],
[
“罗恩”,
“主人”,
789,
“约翰A”,
“约翰。a@email.com"
],
[
“迈克”,
“阮”,
123,
“桑德拉·M.”,
“桑德拉。m@email.com"
],
[
“MYA”,
“车道”,
456,
“约翰A”,
“约翰。a@email.com"
],
[
“罗伯特”,
“规则”,
100,
“桑德拉·M.”,
“桑德拉。m@email.com"
],
[
“罗伯特”,
“规则”,
100,
“桑德拉·M.”,
“桑德拉。m@email.com"
]
]
我认为这将是reduce函数的一个很好的候选者,但我找不到正确使用它的方法

我想创建一个简单的
{}
数组,将数据汇总为以下内容:

var结果=[
{
主管:“Sandra M.”,//主管姓名
电子邮件:桑德拉。a@email.com,//主管电子邮件
员工:2,//Sandra监督的员工人数
条目:4//以Sandra为主管的数组中的项目总数
},
{
主管:“John A.,//主管姓名
电子邮件:约翰。a@email.com,//主管电子邮件
员工:2,//由John监督的员工人数
条目:3//以John为主管的数组中的项目总数
}
]
这就是我被卡住的地方:

var result=list.reduce(函数(全部,项){
全部[项目[3]]=全部[项目[3]]| |【】
所有[项目[3]]。推送({
监理人:第[3]项:,
电邮:项目[4],,
员工:项目[2]++,,
条目:项[0]++,
})
全部归还
},{})

这里的主要困难似乎是区分员工和(非员工)条目。看起来所有非员工输入项在输入数组中都有6个项(包括月份值),而员工没有月份。通过检查迭代内容的长度,可以很容易地确定这一点

简化为一个由主管电子邮件索引的对象,如果事先不存在,则在该点创建一个对象。然后,如果要迭代的项是employee,则递增
employees
属性(并递增
entries
属性)

var列表=[
[
“MIKE”,//员工优先
“NGUYEN”,//最后一名员工
123,//id
“Sandra M.,//主管姓名
“桑德拉。m@email.com“//主管电子邮件
],
[
“MYA”,
“车道”,
456,
“约翰A”,
“约翰。a@email.com"
],
[
“罗恩”,
“主人”,
789,
“约翰A”,
“约翰。a@email.com"
],
[
“迈克”,
“阮”,
123,
“桑德拉·M.”,
“桑德拉。m@email.com"
],
[
“MYA”,
“车道”,
456,
“二月”,
“约翰A”,
“约翰。a@email.com"
],
[
“罗伯特”,
“规则”,
100,
“三月”,
“桑德拉·M.”,
“桑德拉。m@email.com"
],
[
“罗伯特”,
“规则”,
100,
“三月”,
“桑德拉·M.”,
“桑德拉。m@email.com"
]
]
var resultObj=list.reduce(函数(全部,项){
const isEmployee=item.length==5;
const[supervisor,email]=item.slice(-2);
如果(!所有[电子邮件]){
所有[电子邮件]={主管,电子邮件,员工:0,条目:0};
}
如果(我是雇员){
所有[电子邮件]。员工++;
}
所有[电子邮件]。条目++;
全部归还
},{});
const result=Object.values(resultObj);

控制台日志(结果)谢谢!我实际上是想删除员工的月份值。我已经更新了示例数组。如果这也需要修改,请告诉我。但是现在,如果没有月份,您如何区分员工和仅作为条目的员工?逻辑是什么?数组中的每个项都是一个条目。员工将是阵列中每个唯一的个人。例如,对于employee Robert Rules,有两个条目,因为他出现了两次。很抱歉造成混淆。为了进一步澄清,我尝试汇总同一主管的所有条目(即数组项),并汇总分配给主管的唯一员工,无论他们在数组列表中出现多少次。我希望这不会引起更多的混乱。看起来,当有重复用户时,ID会重复,因此您可以使用一个集合来跟踪哪些ID已经被算作员工-请参阅编辑