Javascript 在复杂数组上分组
我有一个这样的数组:Javascript 在复杂数组上分组,javascript,arrays,group-by,Javascript,Arrays,Group By,我有一个这样的数组: scripts [ ["scriptNameA", "dateAsString1", number], ["scriptNameB", "dateAsString1", number], ["scriptNameC", "dateAsString2", number], ["scriptNameD", "dateAsString3", number], ["scriptNameE", "dateAsStri
scripts
[
["scriptNameA", "dateAsString1", number],
["scriptNameB", "dateAsString1", number],
["scriptNameC", "dateAsString2", number],
["scriptNameD", "dateAsString3", number],
["scriptNameE", "dateAsString3", number]
]
我想得到一个按日期分组的数组,如
scriptsGroupedByDate[
"dateAsString1"[
["scriptNameA", "dateAsString1", number],
["scriptNameB", "dateAsString1", number]
],
"dateAsString2"[
["scriptNameC", "dateAsString2", number]
],
"dateAsString3"[
["scriptNameD", "dateAsString3", number],
["scriptNameE", "dateAsString3", number]
]
]
有办法做到这一点吗?
谢谢使用reduce很容易
let number=0;
让脚本=[
['scriptNameA','DateAsString',编号],
['scriptNameB','DateAsString',编号],
['scriptNameC','DateAsString',编号],
['scriptNameD','DateAsString',number],
['scriptNameE','dateAsString3',编号]
];
const res=scripts.reduce((a,b)=>a.set(b[1],(a.get(b[1])| |[]).concat(b)),新映射);
log(res)//打开控制台,因此的控制台输出无法映射代码>
let number=0;
让脚本=
[
[“scriptNameA”,“dateAsString1”,编号],
[“scriptNameB”,“dateAsString1”,编号],
[“scriptNameC”,“dateAsString2”,编号],
[“scriptNameD”,“dateAsString3”,编号],
[“scriptNameE”,“dateAsString3”,编号]
];
var result=scripts.reduce((a,b)=>(a[b[1]]?a[b[1]]。push(b):a[b[1]]=[b],a),{});
控制台日志(结果)代码>@gkelly和其他人:感谢这些伟大的答案。我有一段时间掌握了所有的语法。这是相同的答案,因此您可以一步一步地调试它,并查看它是如何工作的。很抱歉将其作为答案发布,但我不知道如何在注释中格式化代码
let number = 0;
let scripts =
[
["scriptNameA", "dateAsString1", number],
["scriptNameB", "dateAsString1", number],
["scriptNameC", "dateAsString2", number],
["scriptNameD", "dateAsString3", number],
["scriptNameE", "dateAsString3", number]
];
var func = function(accum, arrayitem) {
debugger;
//arrayitem is one of the five items in the scripts array. It is itself an array.
//The 2nd item (zero based index) is the groupby value
var groupByVal = arrayitem[1];
//the accumulator is first an empty object (second parameter to reduce function)
if(accum[groupByVal]){
accum[groupByVal].push(arrayitem);
}
else {
accum[groupByVal] = [arrayitem];
}
return accum;
};
var result = scripts.reduce(func, {});
console.log(result);
请添加有效的输出。你想要一个二维阵列吗?或者是一个对象,其键为dateAsString1
等,值为分组数组?非常感谢,它工作得非常好,对我帮助很大!!请记住,这里的答案不一定是最好的。我自己也为此感到内疚。我试着想出一小段有效的代码,因为有时要看谁能先回答是一场竞赛。最后,它是有效的,但可读性不强。不管怎么说,不客气,但请重写它,使其可读。不过,有些答案非常详细,经过深思熟虑,我祝贺那些花时间把事情做好的人