【问题标题】:Reduce an array of objects & tally the values of their array [closed]减少对象数组并计算其数组的值[关闭]
【发布时间】:2020-07-15 20:04:33
【问题描述】:

假设我有一个对象数组:

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}

【问题讨论】:

  • “我是先从 .map 开始,然后在 map 函数中减少吗?” - 听起来不错。试一试。

标签: javascript ecmascript-6


【解决方案1】:

您可以使用Array.prototype.reduce 一次性完成:在data 的每次迭代中,您只需遍历数组中的所有颜色,如果存在累加器,则单独检查它们:

  • 如果存在,则将 count 加 1
  • 否则,将起始值设置为 1

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']}
];

const count = data.reduce((acc, cur) => {
  const colors = cur.c;
  
  colors.forEach(color => {
    acc[color] = acc[color] ? acc[color] + 1 : 1;
  });
  
  return acc;
}, {});

console.log(count);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2020-08-16
    • 2021-08-17
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多