Javascript 计算和存储对象数组中的不同元素及其计数

Javascript 计算和存储对象数组中的不同元素及其计数,javascript,arrays,node.js,Javascript,Arrays,Node.js,我有一个对象数组,我想计算不同元素的数量和这些对象的数量 [ { name: 'Suman', game: '5A' }, { name: 'Suman', game: '5A' }, { name: 'Namus', game: '5A' }, { name: 'Namus', game: '5A' } ] 我想计算不同名称的数量,并将它们存储在一个对象中。我尝试过1#将所有名称按入一个数组, 2#然后分类, 3#然后计算不同名称的

我有一个对象数组,我想计算不同元素的数量和这些对象的数量

[ { name: 'Suman',
    game: '5A'
  },
  { name: 'Suman',
    game: '5A'
  },
  { name: 'Namus',
    game: '5A'
  },
  { name: 'Namus',
    game: '5A'
  }
]
我想计算不同名称的数量,并将它们存储在一个对象中。我尝试过1#将所有名称按入一个数组, 2#然后分类, 3#然后计算不同名称的数量和 4#最后把他们推到物体上。 这个过程太长了。有没有较短的方法可以做到这一点。我正在使用Nodejs


提前感谢

您将创建一个新对象,其中键是名称,值是计数:

var youArr = [ 
  { name: 'Suman',
    game: '5A'
  },
  { name: 'Suman',
    game: '5A'
  },
  { name: 'Namus',
    game: '5A'
  },
  { name: 'Namus',
    game: '5A'
  }
];

var count = {}
for(var i=0; i < youArr.length; i++){
    count[youArr[i].name] = count[youArr[i].name] || 0;
    count[youArr[i].name]++;
}

alert(count['Namus']); // 2
var youArr=[
{名称:'苏曼',
游戏:“5A”
},
{名称:'苏曼',
游戏:“5A”
},
{名称:'Namus',
游戏:“5A”
},
{名称:'Namus',
游戏:“5A”
}
];
变量计数={}
对于(变量i=0;i
这是一个很好的地方,可以使用:

reduce()方法对累加器和每个累加器应用一个函数 数组的值(从左到右)必须将其减少为单个值 价值观

reduce对中存在的每个元素执行一次回调函数 数组(不包括数组中的孔)接收四个参数: 初始值(或来自上一次回调调用的值),的值 当前元素、当前索引和其上的数组 迭代正在发生

它看起来像这样:

var arr = [ { name: 'Suman',
    game: '5A'
  },
  { name: 'Suman',
    game: '5A'
  },
  { name: 'Namus',
    game: '5A'
  },
  { name: 'Namus',
    game: '5A'
  }
]

var counts = arr.reduce(function(counts, item) {
    counts[item.name] = (counts[item.name] || 0) + 1;
    return counts;
}, {});
计数
为:

{ Suman: 2, Namus: 2 }
[ { name: 'Suman', count: 2 },
  { name: 'Namus', count: 2 } ]

评论中询问:


如果我希望在一个对象数组中包含计数和名称,如
[{name:'Suman',count:'2'},{name:'Namus',count:'2'}]

如果您已经从上面的
reduce
调用中获得了
计数
,则可以将其键设置为所需的格式:

var countsArray = Object.keys(counts).map(function(name) {
    return {name: name, count: counts[name]};
});
countsArray
则是:

{ Suman: 2, Namus: 2 }
[ { name: 'Suman', count: 2 },
  { name: 'Namus', count: 2 } ]

如果我想要像[{name:'Suman',count:2},{name:'Namus',count:2}]这样的对象数组中的计数和名称该怎么办?谢谢,伙计,我从来都不清楚映射。你刚刚睁开了我的眼睛。