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

如何优雅合并嵌套JSON对象?特定JSON数组合并需求问询

优雅实现JSON值的扁平化与重新映射

嘿,这个需求完全可以用JavaScript的数组和对象API组合出简洁优雅的实现,不用手动写循环去逐个添加值或者计数~

核心思路

我们需要两步完成:

  1. 把原数组中每个对象的所有值提取出来,合并成一个一维数组
  2. 将这个一维数组转成以索引为键的对象,最后包在数组里

简洁实现方案(现代JS环境)

const originalData = [ { "2": "a", "3": "a" }, { "2": "f", "3": "a", "4": "p" }, { "2": "n", "3": "o", "4": "t" } ];

const result = [
  Object.fromEntries(
    originalData
      .flatMap(obj => Object.values(obj))
      .entries()
  )
];

console.log(result);
// 输出: [ { "0":"a", "1":"a", "2":"f", "3":"a", "4":"p", "5":"n", "6":"o", "7":"t" } ]

代码解释:

  • originalData.flatMap(obj => Object.values(obj)):遍历原数组的每个对象,用Object.values()取出对象的所有值,flatMap会自动把这些分散的数组合并成一个一维数组,结果是 ["a", "a", "f", "a", "p", "n", "o", "t"]
  • .entries():对一维数组调用entries(),会得到迭代器,每一项是[索引, 值]的结构(比如[0, "a"]、[1, "a"])
  • Object.fromEntries(...):直接把[键, 值]格式的迭代器转换成对象,自动将索引转为字符串类型的键
  • 最后把生成的对象包裹在数组里,就是你要的预期输出

兼容旧环境的替代方案

如果你的运行环境不支持flatMap或Object.fromEntries(比如旧版浏览器),可以用以下写法:

const originalData = [ { "2": "a", "3": "a" }, { "2": "f", "3": "a", "4": "p" }, { "2": "n", "3": "o", "4": "t" } ];

// 第一步:扁平化所有值
const flattenedValues = [].concat(...originalData.map(obj => Object.values(obj)));

// 第二步:转成索引为键的对象
const resultObj = flattenedValues.reduce((acc, val, index) => {
  acc[index] = val;
  return acc;
}, {});

// 最后包在数组里
const result = [resultObj];

这种写法用concat+map替代flatMap,用reduce替代Object.fromEntries,兼容性更好,逻辑也清晰易懂~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:14:19