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

求助:如何用JavaScript将数组嵌套元素转换为对象字段

解决方案

你可以通过遍历原数组,对每个对象做扁平化处理,把CField1数组里的嵌套字段展开为带编号后缀的平级属性。具体代码如下:

const originalData = [
  {"Field1": "value11", "Field2":"value21", "CField1":[{"Id": 1, "Value":"myValue11", "Flag":"Y"}, {"Id": 2, "Value":"myValue12", "Flag":"n"}]},
  {"Field1": "value21", "Field2":"value22", "CField1":[{"Id": 1, "Value":"myValue21", "Flag":"Y"}, {"Id": 2, "Value":"myValue22", "Flag":"n"}]}
];

const transformedData = originalData.map(item => {
  // 复制原对象中除CField1外的所有属性
  const transformedItem = { ...item };
  // 移除原对象里的嵌套数组字段
  delete transformedItem.CField1;
  
  // 遍历嵌套数组,生成带编号的平级属性
  item.CField1.forEach(subItem => {
    transformedItem[`Value${subItem.Id}`] = subItem.Value;
    transformedItem[`Flag${subItem.Id}`] = subItem.Flag;
  });
  
  return transformedItem;
});

console.log(JSON.stringify(transformedData, null, 2));

代码说明

  1. 外层数组遍历:用Array.map()处理每个对象,直接生成新的转换后数组,比你找到的forEach更适合生成新数据集的场景。
  2. 基础属性复制:用扩展运算符{ ...item }保留原对象的Field1、Field2等属性,避免直接修改原数据。
  3. 嵌套字段展开:遍历CField1子项,根据子项的Id动态生成新键名(如Value1、Flag1),并赋值对应的值。
  4. 清理冗余字段:删除原对象中的CField1,确保最终结果结构符合预期。

和你找到的代码的适配逻辑

你原来的代码核心是通过forEach给对象动态添加属性,我们把这个逻辑迁移到了嵌套数组的处理上——本质都是根据遍历项动态生成对象属性,只是需要先处理外层数组的每个对象,再遍历内层的嵌套数组完成字段展开。

运行代码后,输出结果与你期望的结构一致:

[
  {
    "Field1": "value11",
    "Field2": "value21",
    "Value1": "myValue11",
    "Flag1": "Y",
    "Value2": "myValue12",
    "Flag2": "n"
  },
  {
    "Field1": "value21",
    "Field2": "value22",
    "Value1": "myValue21",
    "Flag1": "Y",
    "Value2": "myValue22",
    "Flag2": "n"
  }
]

内容的提问来源于stack exchange,提问作者gt.guybrush

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:30:47