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

如何统计数组中按ID区分的对象数量并生成指定格式字符串

解决方案

步骤1:统计每个商品的数量

用Map来统计重复项,遍历数组时,若当前ID已存在则数量加1,不存在则初始化数量为1:

const cart = [
  { "id":5, "name": "banana" },
  { "id":5, "name": "banana" },
  { "id":4, "name": "apple" },
  { "id":1, "name": "strawberry" },
  { "id":1, "name": "strawberry" }
];

// 统计各商品数量
const countMap = new Map();
cart.forEach(item => {
  if (countMap.has(item.id)) {
    countMap.set(item.id, { ...countMap.get(item.id), count: countMap.get(item.id).count + 1 });
  } else {
    countMap.set(item.id, { name: item.name, count: 1 });
  }
});

步骤2:按ID从高到低排序

将Map的键值对转为数组,再根据ID降序排序:

// 转换为数组并按ID降序排列
const sortedItems = Array.from(countMap.entries())
  .sort(([idA], [idB]) => idB - idA);

步骤3:生成目标格式字符串

遍历排序后的数组,拼接成要求的格式,同时处理名称首字母大写:

// 生成最终字符串
const result = sortedItems.map(([_, { name, count }]) => {
  const formattedName = name.charAt(0).toUpperCase() + name.slice(1);
  return `${count}x ${formattedName}`;
}).join(', ');

console.log(result); // 输出:2x Banana, 1x Apple, 2x Strawberry

完整整合代码

const cart = [
  { "id":5, "name": "banana" },
  { "id":5, "name": "banana" },
  { "id":4, "name": "apple" },
  { "id":1, "name": "strawberry" },
  { "id":1, "name": "strawberry" }
];

const countMap = new Map();
cart.forEach(item => {
  countMap.has(item.id) 
    ? countMap.set(item.id, { ...countMap.get(item.id), count: countMap.get(item.id).count + 1 })
    : countMap.set(item.id, { name: item.name, count: 1 });
});

const result = Array.from(countMap.entries())
  .sort(([a], [b]) => b - a)
  .map(([_, { name, count }]) => `${count}x ${name.charAt(0).toUpperCase() + name.slice(1)}`)
  .join(', ');

console.log(result);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:21:12