JavaScript使用reduce从数组创建带有计数的对象

4

我正在尝试解决一个小问题,需要使用reduce创建一个包含每个项计数的对象。

我以为我理解了reduce的工作原理,使用函数将多个值缩减为一个值,但我无法弄清楚这是如何工作的。

有任何想法或建议吗?非常感谢。

// var people = ['josh', 'dan', 'sarah', 'joey', 'dan', 'josh', 'francis', 'dean'];

// can reduce be used to get: 

// { 
//   josh: 2,
//   dan: 2, 
//   sarah: 1,
//   joey: 1,
//   francis: 1,
//   dean: 1
// }
2个回答

4

如您所见,您需要一个对象作为结果集来计算数组中的项目数。

要获得结果,您可以使用默认值为零,并使用给定名称作为属性进行计数,以便添加一个来计算实际值。

var people = ['josh', 'dan', 'sarah', 'joey', 'dan', 'josh', 'francis', 'dean'],
    counts = people.reduce(function (c, p) {
        c[p] = (c[p] || 0) + 1;
        return c;
    }, Object.create(null));
    
console.log(counts);


0
const groupedByName = people.reduce((obj, person) => {
  const count = obj[person] || 0
  return { ...obj, [person]: count + 1 }
}, {})

正在使用codepen进行编程


这是我正在学习的函数式编程课程中的内容。我认为它很好。 - Dan Zuzevich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接