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

如何将JS对象数组的所有键合并为单个数组并去重排除name键

报错原因

  • 遍历逻辑错误:data数组的每一项都是普通对象,你代码里写的cur[0]会拿到undefined,调用Object.keys(undefined)就会触发TypeError: Cannot convert undefined or null to object报错。
  • reduce返回值类型不匹配:你给reduce设置的初始值是空数组,但遍历过程中返回的是{ names }对象,类型不一致导致后续遍历逻辑完全失效。
  • 过滤逻辑不可靠:使用keys.splice(1)删除第一个键的逻辑依赖name是对象的第一个键,一旦对象键顺序变化就会出现误删。

正确实现

极简写法(ES2019+支持)

使用flatMap+Set组合实现,代码简洁易读:

const result = [...new Set(data.flatMap(item => 
  Object.keys(item).filter(key => key !== 'name')
))]

逻辑说明:

  1. flatMap遍历每个对象,返回当前对象过滤掉name后的键数组,自动把所有数组合并为一维数组
  2. 利用Set结构自动去除重复键
  3. 用扩展运算符把Set转为普通数组,得到最终结果

兼容写法(全ES版本支持)

使用reduce实现,兼容性更好:

const result = data.reduce((acc, cur) => {
  Object.keys(cur).forEach(key => {
    if (key !== 'name' && !acc.includes(key)) {
      acc.push(key)
    }
  })
  return acc
}, [])

逻辑说明:

  1. reduce初始值设为空数组,用来存储最终的键列表
  2. 遍历每个对象的所有键,过滤掉name且未在结果数组中出现过的键,推入结果数组
  3. 遍历完成后直接拿到符合要求的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03