【问题标题】:How do I count the number of unique elements in an array of objects using the object property?如何使用 object 属性计算对象数组中唯一元素的数量?
【发布时间】:2021-12-31 17:15:33
【问题描述】:

我有一个如下所示的数组:

let arr = [
    {'option1':1},{'option1':1},{'option1':1},
    {'option1':2},{'option1':2},
    {'option1':3},
    {'option2':1},{'option2':1}
]

我需要遍历数组并计算每个具有相同属性的元素的出现次数,如下所示:

   option1:{
            1:3,
            2:2,
            3:1,
           },
   option2:{
            1:2,
           }

基本上说属性为1的option1有3个计数,属性为2的option1有2个计数,属性为3的option1有1个计数,依此类推。

【问题讨论】:

  • 您将数组元素分组到不同行的方式有什么关系吗?我问是因为在 JavaScript 中,数组元素之间的换行无关紧要。如果将每个项目写入同一行或将它们写入不同的行,则数组是相同的。此外,预期结果背后的逻辑也很模糊。请解释从您显示的数据中获得预期结果所需的逻辑步骤。
  • 你好@tao,我如何将数组分组到问题没有相关性。我这样做只是为了更清楚地查看数组。我已经更新了问题以更好地解释输出
  • 您的option1 计数在编辑前是1:3, 2:1, 3:1。现在很清楚你想要什么了。

标签: javascript arrays iteration


【解决方案1】:

这样……

let arr = 
  [ { option1: 1 }, { option1: 1 }, { option1: 1 } 
  , { option1: 2 }, { option1: 2 } 
  , { option1: 3 } 
  , { option2: 1 }, { option2: 1 } 
  ] 

let obj = arr.reduce((r,o)=>
  {
  let [name,num] = Object.entries(o)[0] 
  if (!r[name]) r[name] = {}
  if (!r[name][num]) r[name][num] = 1
  else               r[name][num]++
  return r
  },{})

console.log( obj )
.as-console-wrapper { max-height: 100% !important; top: 0 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2015-04-18
    • 2016-03-24
    • 2012-04-28
    • 2018-10-06
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多