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

如何使用reduce()方法统计数组对象中唯一livingId的数量

解决JavaScript reduce()同时统计订单总数与唯一livingId数量的问题

你可以通过在reduce的累加器中引入Set(自动去重的集合)来同时完成两个统计需求,具体实现如下:

示例订单数组

const orders = [
  { livingId: '101' },
  { livingId: '102' },
  { livingId: '101' },
  { livingId: '103' },
  { livingId: '102' },
  { livingId: '101' }
];

基于reduce的实现代码

const stats = orders.reduce((acc, currentOrder) => {
  // 累加订单总数
  acc.totalOrders++;
  // 将当前livingId存入Set,自动过滤重复值
  acc.uniqueLivingIds.add(currentOrder.livingId);
  return acc;
}, {
  totalOrders: 0,
  uniqueLivingIds: new Set() // 初始值包含计数器和空Set
});

// 转换为最终需要的统计结果
const finalResult = {
  totalOrders: stats.totalOrders,
  uniqueLivingIdCount: stats.uniqueLivingIds.size
};

console.log(finalResult); // 输出:{ totalOrders: 6, uniqueLivingIdCount: 3 }

核心思路说明

  1. 累加器初始值:设置一个包含totalOrders(订单总数计数器)和uniqueLivingIds(存储唯一livingId的Set)的对象,作为reduce的初始值。
  2. 订单总数统计:每遍历一个订单,直接对totalOrders做自增操作。
  3. 唯一值统计:利用Set的特性(不允许重复元素),将每个订单的livingId添加到Set中,最后通过Set.size即可得到唯一livingId的数量。

替代方案(不用Set)

如果不想使用Set,也可以用普通对象来标记已出现的livingId:

const stats = orders.reduce((acc, currentOrder) => {
  acc.totalOrders++;
  // 用对象键存储已出现的livingId,值随意(这里用true标记)
  acc.uniqueIds[currentOrder.livingId] = true;
  return acc;
}, { totalOrders: 0, uniqueIds: {} });

const finalResult = {
  totalOrders: stats.totalOrders,
  uniqueLivingIdCount: Object.keys(stats.uniqueIds).length
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:35:23