如何基于JavaScript中的另一个数组对对象数据数组进行分组、重组和计数
我有一个对象数组:如何基于JavaScript中的另一个数组对对象数据数组进行分组、重组和计数,javascript,arrays,Javascript,Arrays,我有一个对象数组: let attend = [ { style: 'Big', date: '03/01/2016' }, { style: 'Big', date: '03/01/2016' }, { style: 'Small', date: '04/01/2016' }, { style: 'Small',
let attend = [
{
style: 'Big',
date: '03/01/2016'
},
{
style: 'Big',
date: '03/01/2016'
},
{
style: 'Small',
date: '04/01/2016'
},
{
style: 'Small',
date: '03/01/2016'
},
{
style: 'Big',
date: '01/01/2016'
}
]
这个数组:let now=['01/01/2016','02/01/2016','03/01/2016']
我想用它来比较、计算和格式化基于日期的对象数组,总之,我希望结果如下所示:
{
name: 'Big',
data: [1, 0, 2]
},
{
name: 'Small',
data: [0, 0, 2]
}
您可以使用此代码对日期键和名称中的日期进行分组
让我们参加=[
{
风格:“大”,
日期:2016年1月3日
},
{
风格:“大”,
日期:2016年1月3日
},
{
风格:“小”,
日期:2016年1月4日
},
{
风格:“小”,
日期:2016年1月3日
},
{
风格:“小”,
日期:2016年1月1日
},
{
风格:“大”,
日期:2016年1月1日
},
{
风格:“myTestDear”,
日期:2016年1月5日
}
]
现在让我们来看看['01/01/2016','02/01/2016','03/01/2016']
函数makeZeroArray(数组,索引){
对于(变量i=0;ix.name==attain[i].style)=-1){
结果:推({
姓名:出席[i].style,
数据:makeZeroArray([],now.length)
})
}
var resIndex=result.findIndex(x=>x.name===attent[i].style)
var myIndex=now.findIndex(nowDate=>nowDate===attent[i].date);
如果(myIndex!=-1)
结果[resIndex]。数据[myIndex]+=1;
}
console.log(result)
您可以使用数组#reduce
并根据样式对数据进行分组
并增加给定日期的计数
const attent=[{style:'Big',date:'03/01/2016'},{style:'Big',date:'03/01/2016'},{style:'Small',date:'03/01/2016'},{style:'Big',date:'01/01/2016'},
现在=['01/01/2016','02/01/2016','03/01/2016'],
result=Object.values(attent.reduce((r,{style,date})=>{
r[style]=r[style]|{
名称:style,
数据:数组(现在为.length).fill(0)
};
const index=now.findIndex(option=>option==date);
r[style]。数据[index]+=1;
返回r;
},{}));
控制台日志(结果)代码>感谢Mohammad的回答,我如何使它与变量'now'的长度相同,就像所有变量都具有相同的数据长度一样?我真的很感激。对不起!我现在看不到数组,我认为应该将所有数据分组到数组中。但是我会更新我的代码并使用它。没关系!并对数组中的额外数据生成结果。并且不要显示例如{name:'Small',data:[1,0,1',-1':NaN]},