Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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,我有一个对象数组: 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]},