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

JavaScript嵌套数组遍历:将复杂数组转换为指定结构

解决方案:合并嵌套数组生成目标结构

实现思路

核心是将原数组中CLASS和Mass两个条目下的benefits数据进行合并:

  1. 先提取两类数据的核心内容;
  2. 以interest项的name为唯一标识,合并对应数值;
  3. 组装顶层的限制值和合并后的interest数组,生成目标结构。

代码实现

function transformArray(arr) {
    // 提取CLASS和Mass对应的cover数据
    const classData = arr.find(item => item.name === 'CLASS')?.cover?.[0];
    const massData = arr.find(item => item.name === 'Mass')?.cover?.[0];

    // 容错处理:如果任一数据缺失则返回空数组
    if (!classData || !massData) return [];

    // 用Map存储interest项,以name作为唯一键
    const interestMap = new Map();

    // 存入CLASS的interest数据
    classData.interest.forEach(interestItem => {
        interestMap.set(interestItem.name, {
            name: interestItem.name,
            classLimits: interestItem.limits[0].defaultValue
        });
    });

    // 补充Mass的interest数据
    massData.interest.forEach(interestItem => {
        const existingItem = interestMap.get(interestItem.name);
        if (existingItem) {
            existingItem.massLimits = interestItem.limits[0].defaultValue;
        }
    });

    // 生成最终结果
    return [{
        name: classData.name,
        interest: Array.from(interestMap.values()),
        classLimit: classData.limits[0].defaultValue,
        massLimit: massData.limits[0].defaultValue
    }];
}

// 测试用原数组
const arr = [
    {
        "name": "CLASS",
        "cover": [
            {
                "name": "benefits",
                "interest": [
                    { "name": "one", "limits": [{ "defaultValue": 200 }] },
                    { "name": "two", "limits": [{ "defaultValue": 300 }] }
                ],
                "limits": [{ "defaultValue": "Y" }]
            }
        ]
    },
    {
        "name": "Mass",
        "cover": [
            {
                "name": "benefits",
                "interest": [
                    { "name": "one", "limits": [{ "defaultValue": 300 }] },
                    { "name": "two", "limits": [{ "defaultValue": 500 }] }
                ],
                "limits": [{ "defaultValue": "Y" }]
            }
        ]
    }
];

// 调用函数得到结果
const output = transformArray(arr);
console.log(output);

逻辑说明

  • 数据提取:使用Array.find精准定位CLASS和Mass条目,通过可选链?.避免数据缺失导致的报错;
  • 合并interest:利用Map的键唯一性,确保相同name的interest项被合并,分别赋值classLimits和massLimits;
  • 容错处理:提前判断核心数据是否存在,避免后续操作抛出异常;
  • 结果组装:将合并后的interest数组与顶层限制值整合,生成符合要求的输出结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:30:44