You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将对象数组转换为新对象数组并统计Name字段出现次数

JavaScript 按Name统计出现次数的实现思路

给定输入数组:

let inputArray=[
{Id: '1', Name: 'Ani'},
{Id: '2', Name: 'George'},
{Id: '4', Name: 'George'},
{Id: '5', Name: 'Ani'}];

需要转换成按Name分组、统计出现次数的数组(示例中包含原数组没有的Henry,可按需添加):

let result=[
{ Name: 'Ani', count:2},
{ Name: 'George',count:2},
{ Name: 'Henry',count:1}];

给你几个实用的实现方法:

方法一:用reduce统计+对象转数组

核心是先用reduce遍历数组,生成一个以Name为键、次数为值的统计对象,再把这个对象转换成目标格式的数组。如果要加原数组没有的条目,直接push即可。

let inputArray = [
  {Id: '1', Name: 'Ani'},
  {Id: '2', Name: 'George'},
  {Id: '4', Name: 'George'},
  {Id: '5', Name: 'Ani'}
];

// 统计每个Name的出现次数
const countMap = inputArray.reduce((acc, item) => {
  acc[item.Name] = (acc[item.Name] || 0) + 1;
  return acc;
}, {});

// 转换为目标数组
let result = Object.entries(countMap).map(([Name, count]) => ({ Name, count }));

// 手动添加原数组没有的Henry
result.push({ Name: 'Henry', count: 1 });

console.log(result);

方法二:用Map统计(更直观)

用ES6的Map来存储Name和对应的次数,遍历数组更新计数,最后把Map转换成目标数组。

let inputArray = [
  {Id: '1', Name: 'Ani'},
  {Id: '2', Name: 'George'},
  {Id: '4', Name: 'George'},
  {Id: '5', Name: 'Ani'}
];

const nameMap = new Map();

// 遍历更新计数
inputArray.forEach(item => {
  const currentCount = nameMap.get(item.Name) || 0;
  nameMap.set(item.Name, currentCount + 1);
});

// 转换为目标数组
let result = Array.from(nameMap, ([Name, count]) => ({ Name, count }));

// 添加Henry条目
result.push({ Name: 'Henry', count: 1 });

console.log(result);

核心思路总结

  1. 先完成统计计数:不管用对象还是Map,本质都是遍历输入数组,记录每个Name出现的次数;
  2. 格式转换:把统计好的键值对转换成要求的{Name: '', count: number}格式的对象数组;
  3. 补充额外条目:如果需要加入原数组没有的Name(比如示例中的Henry),直接往结果数组里push对应的对象就行。

内容的提问来源于stack exchange,提问作者Lidiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:54:46