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

JavaScript:提取复杂对象数组中bbb下的ccc数值生成扁平数组

解决复杂对象数组的属性筛选问题

问题需求

遍历给定的对象数组,仅收集直接属于bbb对象下的ccc属性值(要求ccc是数值类型),不符合条件的位置填0,最终得到数组:[11, 0, 0, 0, 511, 77, 0, 0]

现有代码的问题

  1. 递归逻辑只取对象的第一个属性(objEntries[0]),处理bbb内部结构时逻辑混乱,无法正确判断bbb下是否存在合法的ccc
  2. 对非目标结构的情况(比如aaa是数字、bbb是数字)没有返回0的处理,会导致结果数组出现undefined
  3. 递归的终止条件和分支判断不完整,遗漏了多种异常场景

正确实现代码

方案一:使用可选链(简洁版,支持ES2020+)

const arr = [
    { aaa: { bbb: { ccc: 11 } } },
    { aaa: { bbb: { eee: { ccc: 12 } } } },
    { aaa: { bbb: 101} },
    { },
    { aaa: { bbb: { ccc: 511 } } },
    { aaa: { bbb: { ccc: 77 } } },
    { aaa: 24 },
    { aaa: { bbb: { ccc: {ddd: 11 } } } },
];

const result = arr.map(item => {
    // 逐层检查:aaa是对象 → bbb是对象 → ccc是数字
    const cccValue = item?.aaa?.bbb?.ccc;
    return typeof cccValue === 'number' ? cccValue : 0;
});

console.log(result); // 输出 [11, 0, 0, 0, 511, 77, 0, 0]

方案二:兼容旧环境的严谨判断

const arr = [
    { aaa: { bbb: { ccc: 11 } } },
    { aaa: { bbb: { eee: { ccc: 12 } } } },
    { aaa: { bbb: 101} },
    { },
    { aaa: { bbb: { ccc: 511 } } },
    { aaa: { bbb: { ccc: 77 } } },
    { aaa: 24 },
    { aaa: { bbb: { ccc: {ddd: 11 } } } },
];

const result = arr.map(item => {
    // 逐层验证类型,避免类型错误
    if (typeof item === 'object' && item !== null && 'aaa' in item) {
        const aaa = item.aaa;
        if (typeof aaa === 'object' && aaa !== null && 'bbb' in aaa) {
            const bbb = aaa.bbb;
            if (typeof bbb === 'object' && bbb !== null && 'ccc' in bbb) {
                const ccc = bbb.ccc;
                if (typeof ccc === 'number') {
                    return ccc;
                }
            }
        }
    }
    return 0;
});

console.log(result); // 输出 [11, 0, 0, 0, 511, 77, 0, 0]

逻辑说明

  • 遍历数组时,对每个元素逐层检查属性存在性和类型:
    1. 先判断当前元素是有效对象,且包含aaa属性
    2. 判断aaa是有效对象,且包含bbb属性
    3. 判断bbb是有效对象,且包含ccc属性,同时ccc是数值类型
  • 任何一层不满足条件,直接返回0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:30:40