
本文介绍如何遍历含嵌套 radars.all 结构的对象数组,将分散在各对象中的 p1、p2、p3plus、total 计数提取并按字段归组为统一数组(缺失字段补 0),最终输出标准键值映射格式。
本文介绍如何遍历含嵌套 `radars.all` 结构的对象数组,将分散在各对象中的 `p1`、`p2`、`p3plus`、`total` 计数提取并按字段归组为统一数组(缺失字段补 0),最终输出标准键值映射格式。
在实际数据处理中,我们常遇到结构不一致但语义统一的嵌套数组——例如每个部门(如 "Engineering"、"Environment")都应包含 p1/p2/p3plus/total 四类指标,但部分对象可能缺失某些字段(如 Environment 缺少 p1 和 p2)。此时直接解构会报错,需安全读取 + 默认填充 + 按索引对齐聚合。
核心思路分两步:
-
归一化聚合:使用
reduce()构建一个以字段名为键(p1、p2等)、值为长度等于输入数组的数值数组的对象; -
格式转换:将该对象通过
Object.keys().map()转为题目要求的[ { "P1": [...] }, { "P2": [...] } ]形式,并完成字段名大小写与符号标准化(如p3plus→P3+)。
以下是完整可运行实现:
const input = [
{
"name": "Engineering",
"radars": {
"all": {
"p1": { "count": 4 },
"p2": { "count": 1 },
"p3plus": { "count": 2 },
"total": { "count": 7 }
}
}
},
{
"name": "Environment",
"radars": {
"all": {
"p3plus": { "count": 1 },
"total": { "count": 1 }
}
}
},
{
"name": "others",
"radars": {
"all": {}
}
}
];
// 步骤1:按字段聚合计数(自动补0)
const aggregated = input.reduce((acc, curr, idx) => {
// 遍历当前对象 radars.all 中所有存在的字段
Object.keys(curr.radars?.all || {}).forEach(key => {
// 初始化该字段对应数组(长度 = input.length,全0)
if (!acc[key]) {
acc[key] = Array(input.length).fill(0);
}
// 填入当前索引位置的实际 count 值
acc[key][idx] = curr.radars.all[key]?.count ?? 0;
});
return acc;
}, {});
// 步骤2:映射为题目要求的 [{ "P1": [...] }, ...] 格式,并标准化键名
const output = [
{ "P1": aggregated.p1 || Array(input.length).fill(0) },
{ "P2": aggregated.p2 || Array(input.length).fill(0) },
{ "P3+": aggregated.p3plus || Array(input.length).fill(0) },
{ "Total": aggregated.total || Array(input.length).fill(0) }
];
console.log(output);
// 输出:
// [
// { "P1": [4, 0, 0] },
// { "P2": [1, 0, 0] },
// { "P3+": [2, 1, 0] },
// { "Total": [7, 1, 0] }
// ]
✅ 关键注意事项:
- 使用可选链
?.和空值合并??防止因字段缺失导致运行时错误; -
Array(input.length).fill(0)确保每个字段数组长度严格对齐原始输入顺序; - 若未来字段扩展(如新增
p4),只需在最终output数组中追加对应项,逻辑无需改动; - 不建议在
reduce内部硬编码字段列表(如['p1','p2',...]),本方案动态发现字段更健壮;若需严格限定字段集,可在reduce后用白名单过滤:const validKeys = ['p1', 'p2', 'p3plus', 'total']; const final = Object.fromEntries(validKeys.map(k => [k, aggregated[k] || Array(input.length).fill(0)]));
该方法兼顾鲁棒性与可维护性,适用于任意长度、任意字段缺失组合的同类嵌套统计场景。










