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

如何遍历对象数组并生成键值对形式的结果?

如何遍历对象数组并生成键值对形式的结果?

嘿,我完全get到你的需求了!你手里有一个包含不同部门的对象数组,每个部门的radars.all里可能包含p1、p2、p3plus(也就是你说的p3+)和total的统计值,要是某个属性缺失的话就默认count为0,最终要把这些数据整理成清晰的键值对形式对吧?我来给你一步步实现这个功能。

首先先把你提到的输入补全(根据你描述的Environment部门情况),方便后续演示:

const input = [
    {
        "name": "Engineering",
        "radars": {
            "all": {
                "p1": { "count": 4 },
                "p2": { "count": 1 },
                "p3plus": { "count": 2 },
                "total": { "count": 7 }
            }
        }
    },
    {
        "name": "Environment",
        "radars": {
            "all": {
                "p3plus": { "count": 3 },
                "total": { "count": 3 }
            }
        }
    },
    // 再加个测试用例,模拟只有部分属性的情况
    {
        "name": "HR",
        "radars": {
            "all": {
                "p1": { "count": 5 }
            }
        }
    }
];

接下来是核心的处理代码,用JavaScript实现:

const generateStatsResult = (departmentArray) => {
    // 定义我们需要统计的所有属性,要是想把p3plus改成p3+可以后续调整
    const requiredStatsKeys = ['p1', 'p2', 'p3plus', 'total'];
    
    // 用reduce遍历数组,逐步构建键值对结果
    return departmentArray.reduce((finalResult, currentDept) => {
        // 先拿到当前部门的all统计数据,没有的话用空对象兜底避免报错
        const deptAllStats = currentDept.radars?.all || {};
        
        // 为当前部门生成完整的统计对象,缺失的属性设为0
        const deptCompleteStats = requiredStatsKeys.reduce((stats, key) => {
            stats[key] = deptAllStats[key]?.count || 0;
            return stats;
        }, {});
        
        // 把部门名称作为键,统计对象作为值存入结果
        finalResult[currentDept.name] = deptCompleteStats;
        return finalResult;
    }, {});
};

// 执行函数得到结果
const output = generateStatsResult(input);
console.log(output);

运行这段代码后,你会得到这样的结果:

{
  Engineering: { p1: 4, p2: 1, p3plus: 2, total: 7 },
  Environment: { p1: 0, p2: 0, p3plus: 3, total: 3 },
  HR: { p1: 5, p2: 0, p3plus: 0, total: 0 }
}

额外说明和小调整

  1. 兼容旧环境:如果你的运行环境不支持ES2020的可选链?.,可以换成传统的判断写法:
    // 替换deptAllStats的获取
    const deptAllStats = (currentDept.radars && currentDept.radars.all) || {};
    // 替换count的获取
    stats[key] = (deptAllStats[key] && deptAllStats[key].count) || 0;
    
  2. 把p3plus改成p3+:要是你希望结果里的键是p3+而不是p3plus,可以加个映射关系:
    const keyMapping = { 'p1': 'p1', 'p2': 'p2', 'p3+': 'p3plus', 'total': 'total' };
    const requiredStatsKeys = ['p1', 'p2', 'p3+', 'total'];
    
    // 内部reduce里改成
    stats[key] = deptAllStats[keyMapping[key]]?.count || 0;
    
    这样结果里的键就会变成你想要的p3+啦。

备注:内容来源于stack exchange,提问作者Aren Trot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:39:32