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

原生JavaScript如何按对象键对万级对象数组做键值分组聚合?

原生JS万级对象数组按键聚合最优实现

方案核心优势

  • 时间复杂度仅为O(n),单次遍历即可完成所有聚合操作,万级数据可毫秒级完成计算
  • 采用Set做值存储,插入、去重判断都是O(1)时间复杂度,远优于数组includes的线性查找
  • 自动过滤空字符串、null、undefined三类空值,兼容数组内对象键不一致的场景

实现代码

function aggregateFields(arr) {
  const result = {}
  // 单次遍历所有记录
  for (const item of arr) {
    // 遍历当前对象的所有自有属性
    for (const key in item) {
      if (!item.hasOwnProperty(key)) continue
      const value = item[key]
      // 过滤空值:空字符串、null、undefined
      if (value == null || value === '') continue
      // 首次遇到对应键时初始化Set
      result[key] = result[key] || new Set()
      result[key].add(value)
    }
  }
  // Set转数组得到最终结果
  return Object.fromEntries(
    Object.entries(result).map(([key, set]) => [key, Array.from(set)])
  )
}

测试效果

const data = [
  { company: "TATA", car: "TATA Indica", color: "Blue" },
  { company: "TATA", car: "TATA Indica", color: "Black" },
  { company: "TATA", car: "Safari", color: "Blue" },
  { company: "Suzuki", car: "", color: "" }
]

console.log(aggregateFields(data))
// 输出符合预期:
// {
//   company: ["TATA", "Suzuki"],
//   car: ["TATA Indica", "Safari"],
//   color: ["Blue", "Black"]
// }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:45:03