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

如何遍历JavaScript对象并获取属性的父级属性?

获取JavaScript对象属性的父级及祖先属性

要获取属性的父级及祖先属性,核心是在递归遍历过程中传递并维护当前属性的父级链。下面是针对你的代码的修改实现:

修改后的遍历函数及示例

function iterate(o, parentChain = []) {
    Object.keys(o).forEach(function (k) {
        if (o[k] !== null && typeof o[k] === 'object') {
            // 递归遍历子对象时,将当前键加入父级链,传递给下一层
            iterate(o[k], [...parentChain, k]);
            return;
        }
        if (typeof o[k] === 'boolean') {
            // 以'v9'为例,获取父级和祖父级属性
            if (k === 'v9') {
                const parent = parentChain.at(-1); // ES2022+语法,等价于parentChain[parentChain.length - 1]
                const grandParent = parentChain.at(-2);
                console.log(`属性${k}的父级是${parent},祖父级是${grandParent}`);
            }
        }
    });
}

const obj = {
    a: {
        'v1': true,
        'v2': true,
        'v3': false
    },
    b: {
        'v4': false,
        'v5': true,
        'v6': false,
        c: {
            'v7': false,
            'v8': true,
            'v9': false
        }
    }
};

iterate(obj);

关键逻辑说明

  • 新增parentChain参数:这是一个数组,用来存储当前节点的所有祖先键,初始调用时默认是空数组。
  • 递归传递父级链:每次遍历到子对象时,用扩展运算符创建新数组,把当前键加入后传递给下一层递归,避免修改原数组影响其他分支。
  • 提取祖先属性:当找到目标布尔属性时,通过数组下标(或at()方法)从parentChain中获取对应层级的祖先键。at(-1)取最后一个元素(父级),at(-2)取倒数第二个(祖父级)。

运行上述代码,控制台会输出:属性v9的父级是c,祖父级是b,完全满足需求。

注:如果需要支持更复杂的链式调用(比如类似k.parent的写法),可以考虑给属性键包装父级引用,但这种方式会额外占用内存且可能污染原对象,不如直接使用父级链数组简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:39:45