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

如何构建指定结构的数组?现有JS代码输出不符求解决方案

如何构建包含三个子数组的特定结构数组?

我需要构建一种特定结构的数组(content包含三个子数组),但不清楚如何编写对应的函数。我尝试了以下代码,但输出结果与预期存在差异,请问是否有其他实现方式?

const estructuringAccount = (account) => {
    return account.subaccounts.map(subaccount => {
        const arraysSubaccount = subaccount.summaries.map(content => {
            return {
                [content.type]: [
                    { month: "january", total: content.january },
                    { month: "february", total: content.february },
                    { month: "march", total: content.march },
                    { month: "april", total: content.april },
                    { month: "may", total: content.may },
                    { month: "june", total: content.june },
                    { month: "july", total: content.july },
                    { month: "august", total: content.august },
                    { month: "september", total: content.september },
                    { month: "october", total: content.october },
                    { month: "november", total: content.november },
                    { month: "december", total: content.december }
                ]
            }
        })
        return {
            key: subaccount.id,
            name: subaccount.name,
            content: [{
                year: subaccount.summaries[0].year,
                summary: subaccount.summaries[0].summary,
                ...arraysSubaccount
            }]
        }
    })
}

问题分析

你的代码核心问题在于:

  1. arraysSubaccount是对象数组,但你用展开运算符...arraysSubaccount将其合并到单个对象中,未形成content需要的子数组结构
  2. 仅提取了summaries[0]的year和summary,忽略了其他summaries条目的对应值
  3. 重复编写12个月份的代码,冗余且不易维护

解决方案

根据content包含三个子数组的需求,分两种场景给出实现:

场景1:content的每个子数组对应一个summaries条目

如果每个summaries条目对应content的一个子元素,每个子元素包含year、summary和对应type的月度数据,代码可优化为:

const estructuringAccount = (account) => {
    // 定义月份列表,避免重复代码
    const months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
    
    return account.subaccounts.map(subaccount => {
        // 直接将每个summary转换为content的子数组元素
        const content = subaccount.summaries.map(summary => ({
            year: summary.year,
            summary: summary.summary,
            [summary.type]: months.map(month => ({
                month,
                total: summary[month]
            }))
        }));

        return {
            key: subaccount.id,
            name: subaccount.name,
            content
        };
    });
};

场景2:content是单元素数组,内部对象包含三个type的月度数组

如果content是一个数组,里面的单个对象需要整合所有summaries的type数据,代码可调整为:

const estructuringAccount = (account) => {
    const months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
    
    return account.subaccounts.map(subaccount => {
        // 用reduce合并所有summary的type数据到一个对象
        const mergedSummary = subaccount.summaries.reduce((acc, summary) => {
            acc[summary.type] = months.map(month => ({
                month,
                total: summary[month]
            }));
            // 假设所有summary的year和summary值一致,若不一致需按需调整
            acc.year = summary.year;
            acc.summary = summary.summary;
            return acc;
        }, {});

        return {
            key: subaccount.id,
            name: subaccount.name,
            content: [mergedSummary]
        };
    });
};

内容的提问来源于stack exchange,提问作者Leandro Morocho Soca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:01:35