【问题标题】:Need helping in getting counts out of an array of objects in JavaScript [duplicate]需要帮助从 JavaScript 中的对象数组中获取计数 [重复]
【发布时间】:2020-09-15 23:48:57
【问题描述】:

我正在处理一个看起来像这样的对象数组:

const fruits = [
 {
   Fruit: Apple,
   Count: 4
 },
 {
   Fruit: Orange,
   Count: 3
 },
 {
   Fruit: Apple,
   Count: 2
 }
]

我喜欢让我的数组看起来像这样:

const fruits = [
 {
  Fruit: Apple,
  Count: 6
 },
 {
  Fruit: Orange,
  Count: 3
 },
]

这有什么帮助吗?我尝试过使用 Reduce,但不用说,Reduce 是我在 JavaScript 中最大的弱点。我看过很多文章得到了一个接近的答案,但没有什么能完全帮助我。感谢您的帮助。

【问题讨论】:

  • "...但没有什么可以完全帮助我" - 关于如何对一组对象进行分组有数百个问题。添加您的方法并添加解释其中的哪一部分不起作用以及您为什么这么认为。恕我直言,这对您的帮助不仅仅是另一个现成的答案。

标签: javascript sorting object reduce


【解决方案1】:

const fruits = [{
    Fruit: "Apple",
    Count: 4
  },
  {
    Fruit: "Orange",
    Count: 3
  },
  {
    Fruit: "Apple",
    Count: 2
  }
];

// c => current value
// n => next value
const asObject = fruits.reduce((c, n) => ({ ...c,
  [n.Fruit]: (c[n.Fruit] || 0) + n.Count
}), {});

const result = Object.entries(asObject).map(([k, v]) => ({
  Fruit: k,
  Count: v
}));

console.log(asObject);
console.log(result);

【讨论】:

    【解决方案2】:

    这是您需要的reduce 解决方案:

    const fruits = [
     {
       Fruit: "Apple",
       Count: 4
     },
     {
       Fruit: "Orange",
       Count: 3
     },
     {
       Fruit: "Apple",
       Count: 2
     }
    ]
    
    let result = fruits.reduce((acc,current) => {
       let obj = acc.find(x => x.Fruit === current.Fruit);
       if(!obj){
          acc.push({ Fruit: current.Fruit, Count: current.Count });
       } else {
          obj.Count += current.Count;
       }
       return acc;
    }, []);
    
    console.log(result);

    基本上您需要构建一个新数组 (acc),如果没有这样的 Fruit,则添加一个新项目或增加计数器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2018-11-01
      • 2015-07-16
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多