使用reduce来汇总javascript对象中特定键的值 参考:

问题描述

目标:返回一个数组,列出对象中某个特定键的唯一值。

const people = [
    {id: 1,name: 'Barb',gender: 'female'},{id: 2,name: 'Carl',gender: 'male'},{id: 3,name: 'John',{id: 4,name: 'Jane',{id: 5,name: 'Pete',{id: 6,name: 'Annie',{id: 7,name: 'Katie',{id: 8,name: 'Sally',{id: 9,name: 'Steve',]

所需的输出

['male','female']

解决方法

您可以使用 Set Object 返回一个数组,其中列出了对象中某个特定键的唯一值。

  • 创建新集合。
  • 使用 forEach() 方法遍历数组。
  • 检查指定的属性并将值添加到 Set
  • 最后,返回唯一值数组。

const people = [
  { id: 1,name: 'Barb',gender: 'female' },{ id: 2,name: 'Carl',gender: 'male' },{ id: 3,name: 'John',{ id: 4,name: 'Jane',{ id: 5,name: 'Pete',{ id: 6,name: 'Annie',{ id: 7,name: 'Katie',{ id: 8,name: 'Sally',{ id: 9,name: 'Steve',];
const unique = (key,array) => {
  const set = new Set();
  array.forEach(
    (x) => Object.prototype.hasOwnProperty.call(x,key) && set.add(x[key])
  );
  return [...set];
};

console.log(unique('gender',people));

,

可以使用 reduce() 和 Set 将类别键简化为唯一值,如下所示:

返回:['female','male']

const people = [
    {id: 1,gender: 'female'},{id: 2,gender: 'male'},{id: 3,{id: 4,{id: 5,{id: 6,{id: 7,{id: 8,{id: 9,]

const genders = people.reduce((aSex,currItem) => {
   aSex.push(currItem.gender);
   return aSex
},[])

let unique = [...new Set(genders)];

console.log(unique)


类似地,可以像这样返回键“类别”中每个唯一值的实例数:

返回:{"female": 3,"male": 4}

const people = [
    {id: 1,]

const genderCount = people.reduce((oSex,currItem) => {
   oSex[currItem.gender] = (oSex[currItem.gender] || 0) + 1
   return oSex
},{})

console.log(genderCount)

参考:

Nina Scholz' one-line solution to the first example

https://www.freecodecamp.org/news/reduce-f47a7da511a9/#creating-a-tally-with-the-reduce-method-in-javascript-

https://wsvincent.com/javascript-remove-duplicates-array/