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

如何转换对象数组,使其stats子数组统一顺序、缺失项补0

实现思路

  • 第一步:遍历所有stats项,提取所有不重复的name值,作为统一的字段顺序基准
  • 第二步:遍历原数组每个元素,按基准name列表生成新的stats数组,存在对应name则取原有value,不存在则设置value为0

完整实现代码

// 初始数据(补全了第一个对象type后缺失的逗号)
const data = [
    {
      type: 'first',
      stats: [
        {name: 'yes', value: 11},
        {name: 'no', value: 33},
      ]
    },
    {
      type: 'second',
      stats: [
        {name: 'call back', value: 32},
        {name: 'no', value: 77},
      ]
    },
    {
      type: 'third',
      stats: [
        {name: 'yes', value: 14},
      ]
    }
]

// 1. 提取所有不重复的name,默认按出现先后排序,可按需调整顺序
const allNames = [...new Set(data.flatMap(item => item.stats.map(s => s.name)))]

// 2. 转换数据
const dataTransformed = data.map(item => {
  // 把当前项的stats转成键值对映射,提升查找效率
  const statMap = Object.fromEntries(item.stats.map(s => [s.name, s.value]))
  // 按统一name列表生成新的stats
  const newStats = allNames.map(name => ({
    name,
    value: statMap[name] ?? 0
  }))
  return {
    ...item,
    stats: newStats
  }
})

console.log(dataTransformed)

输出说明

生成的dataTransformed完全符合要求:

  • 所有项的stats长度、字段顺序完全一致
  • 缺失的字段自动补value为0
  • 原有存在的字段值保留不变

注:你给出的预期结果里第二个stats项的namename: 'no'属于笔误,上述代码会自动修正为正确的name字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:54:06