【问题标题】:Calculating repeating count of values of keys in array of objects计算对象数组中键值的重复计数
【发布时间】:2018-09-22 08:59:40
【问题描述】:

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

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 中实现这一点?

【问题讨论】:

  • objects.map(Object.values).reduce((a, b) => a.concat(b)).reduce((p, c) => (p[c] = (p[c] || 0) + 1, p), {});,虽然这样的问题已经做了几百次了,但做起来还是很有趣的。您应该按照指南的建议自行搜索和尝试。
  • 我可以知道投反对票的原因
  • 那些无法回答的人至少不应该投反对票..
  • 参见例如this question(2-5 分钟谷歌搜索,非常相似)-idownvotedbecau.se/noattempt。我知道我比 stackoverflow 上的大多数人更不赞成投票 - 这个问题的质量比这里经常被赞成的问题要高。一般来说,不要把rep看得太重,这对你没有好处。如果您可以支付四个代表来解决问题,否则您将需要一个小时来解决,这是一笔不错的交易。

标签: javascript arrays json object count


【解决方案1】:

reduceforEach 一起使用

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

演示

var objects = [{
    Ram: "Lunch",
    Luv: "Lunch",
    Rani: "Dinner"
  },
  {
    Ram: "Dinner",
    Luv: "Lunch",
    Rani: "Dinner"
  },
  {
    Ram: "Lunch",
    Luv: "Dinner",
    Rani: "Dinner"
  }
];
var output = objects.reduce((a, c) => (Object.values(c).forEach(s => a[s] = (a[s] || 0) + 1), a), {});
console.log(output);

【讨论】:

    【解决方案2】:

    您可以将reduce()Object.values() 一起使用,并返回一个对象而不是对象数组。

    var objects=[
    {Ram:'Lunch', Luv:'Lunch', Rani:'Dinner'},
    {Ram:'Dinner', Luv:'Lunch', Rani:'Dinner'},
    {Ram:'Lunch', Luv:'Dinner', Rani:'Dinner'}
    ]
    
    const result = objects.reduce((r, o) => {
      Object.values(o).forEach(e => r[e] = (r[e] || 0) + 1)
      return r;
    }, {});
    
    console.log(result)

    【讨论】:

    • 如果我想将结果作为键值对,例如[ { “count” : 5, “type”: “Dinner”, }, { “count” : 4, “type”: “Lunch”, }] 我该怎么做,你能帮忙解决一下这个逻辑吗?跨度>
    • 在这种情况下,您可以使用像这样的代码jsfiddle.net/b5rex4q9/3
    【解决方案3】:

    因为我不喜欢forEach,所以这里是一个双重减少

    const objects = [
      { Ram: 'Lunch',  Luv: 'Lunch',  Rani: 'Dinner' },
      { Ram: 'Dinner', Luv: 'Lunch',  Rani: 'Dinner' },
      { Ram: 'Lunch',  Luv: 'Dinner', Rani: 'Dinner' }
    ];
    
    const count = objects
      // collect and flatten object values
      .reduce((a, o) => a.concat(Object.values(o)), [])
    
      // count individual
      .reduce((c, v) => ({...c, [v]: (c[v] || 0) + 1}), {})
    ;
    
    const list = Object.entries(count)
      // map to {type, count}
      .map(([type, count]) => ({type, count}))
    ;
    
    console.log(count, list);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 2018-07-24
      • 2014-02-24
      • 2019-01-12
      • 2021-07-06
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多