Javascript 减少对象数组&;对其数组的值进行计数
假设我有一个对象数组:Javascript 减少对象数组&;对其数组的值进行计数,javascript,ecmascript-6,Javascript,Ecmascript 6,假设我有一个对象数组: const data = [ {a: 'happy', b: 'robin', c: ['blue','green']}, {a: 'tired', b: 'panther', c: ['green','black','orange','blue']}, {a: 'sad', b: 'goldfish', c: ['green','red']} ]; 如何循环主数据数组并统计颜色值出现的次数 我是否先从.map开始,然后在map函数中减少 我期待的结果是
const data = [
{a: 'happy', b: 'robin', c: ['blue','green']},
{a: 'tired', b: 'panther', c: ['green','black','orange','blue']},
{a: 'sad', b: 'goldfish', c: ['green','red']}
];
如何循环主数据数组并统计颜色值出现的次数
我是否先从.map
开始,然后在map函数中减少
我期待的结果是:
{blue: 2, green: 3, black: 1, orange: 1, red: 1}
您可以使用
Array.prototype.reduce
:在数据的每次迭代中,您只需迭代数组中的所有颜色,并根据累加器分别检查它们(如果存在):
- 如果存在,则将计数增加1
- 否则,将起始值设置为1
const数据=[
{a:'快乐',b:'罗宾',c:[蓝色','绿色']},
{a:'累了',b:'黑豹',c:[绿色','黑色','橙色','蓝色'],
{a:'悲伤',b:'金鱼',c:['绿色','红色']}
];
常量计数=数据减少((acc,cur)=>{
常数颜色=电流c;
颜色。forEach(颜色=>{
acc[颜色]=acc[颜色]?acc[颜色]+1:1;
});
返回acc;
}, {});
控制台日志(计数)代码>“我是否先从.map开始,然后在map函数中使用reduce?”-听起来不错。试试看。