Javascript 计算对象数组中键值的重复计数

Javascript 计算对象数组中键值的重复计数,javascript,arrays,json,object,count,Javascript,Arrays,Json,Object,Count,我试图迭代具有相似键值的对象数组,并希望计算它们的值在整个对象数组中重复了多少次,例如,整个对象数组中的“晚餐”计数 var objects = [ { Ram: 'Lunch', Luv:'Lunch', Rani:'Dinner' }, { Ram: 'Dinner', Luv:'Lunch', Rani:'Dinner' }, { Ram: 'Lunch', Luv:'Dinner', Rani:'Dinner' } ]; 我试图计算午餐发生了多少次,晚餐发生了多少次

我试图迭代具有相似键值的对象数组,并希望计算它们的值在整个对象数组中重复了多少次,例如,整个对象数组中的“晚餐”计数

var objects = [
  { Ram: 'Lunch',  Luv:'Lunch',  Rani:'Dinner' },
  { Ram: 'Dinner', Luv:'Lunch',  Rani:'Dinner' },
  { Ram: 'Lunch',  Luv:'Dinner', Rani:'Dinner' }
];
我试图计算午餐发生了多少次,晚餐发生了多少次,并希望在下面的json中显示如下-

[{'Dinner':5}, {'Lunch':4}];

如何在javascript中实现这一点?

使用
reduce
forEach

var output = objects.reduce( (a, c) => 
    (Object.values(c).forEach( 
       s => a[s] = (a[s] || 0) + 1 ), //end forEach
    a), 
{})//end reduce
演示

var对象=[{
拉姆:“午餐”,
卢夫:“午餐”,
拉妮:“晚餐”
},
{
拉姆:“晚餐”,
卢夫:“午餐”,
拉妮:“晚餐”
},
{
拉姆:“午餐”,
卢夫:“晚餐”,
拉妮:“晚餐”
}
];
var输出=objects.reduce((a,c)=>(Object.values(c).forEach(s=>a[s]=(a[s]| | 0)+1),a),{});
控制台日志(输出)
您可以将
reduce()
Object.values()
一起使用,并返回一个对象作为结果,而不是对象数组

var对象=[
{拉姆:'午餐',卢夫:'午餐',拉尼:'晚餐',
{拉姆:'晚餐',卢夫:'午餐',拉尼:'晚餐',
{拉姆:'午餐',卢夫:'晚餐',拉尼:'晚餐'}
]
常量结果=对象。减少((r,o)=>{
Object.values(o.forEach(e=>r[e]=(r[e]| | 0)+1)
返回r;
}, {});

console.log(result)
因为我不喜欢forEach,这里有一个双重减少:

const对象=[
{拉姆:“午餐”,卢夫:“午餐”,拉尼:“晚餐”},
{拉姆:“晚餐”,卢夫:“午餐”,拉尼:“晚餐”},
{拉姆:'午餐',卢夫:'晚餐',拉尼:'晚餐'}
];
常量计数=对象
//收集并展平对象值
.reduce((a,o)=>a.concat(Object.values(o)),[])
//计算个人
.reduce((c,v)=>({…c,[v]:(c[v]| 0)+1}),{})
;
常量列表=对象。条目(计数)
//映射到{type,count}
.map(([type,count])=>({type,count}))
;

控制台日志(计数、列表)
objects.map(Object.values).reduce((a,b)=>a.concat(b)).reduce((p,c)=>(p[c]=(p[c]|0)+1,p),{}),虽然这类问题已经做了数百次,但仍然很有趣。你应该按照指导方针的建议自己搜索并尝试一下。我可以知道拒绝投票的原因吗?那些不能帮助回答问题的人至少不应该做拒绝投票。参见(2-5分钟谷歌搜索,非常类似)-。我知道我比stackoverflow上的大多数人更喜欢向下投票——这个问题比通常在这里被向上投票的问题有更高的质量。一般来说,不要太认真,这对你没有好处。如果你可以花四个代表的钱来解决一个问题,否则你需要花一个小时来解决,这是一个很好的交易。如果我想以键和值对的形式得到结果,例如,[{“count”:5,“type”:“晚餐”,},{“count”:4,“type”:“午餐”,}]我该怎么做,你能在这个逻辑中提供帮助吗?在这种情况下,你可以使用这样的代码