javascript - 使用递归获取嵌套对象中的所有父对象

标签 javascript object recursion

我有以下对象

const object = {
    id: "1",
    name: "a",
    children: [
        {
            id: "2",
            name: "b",
            children: [
                {
                    id: "3",
                    name: "c"
                }
            ]
        },
        {
            id: "4",
            name: "d"
        }
    ]
};

我需要一个接受对象和最后一个 child 的 id 并返回路径的函数,例如,以下调用:getPath(object, '3');应该返回 [{id: 1}, {id: 2}, {id: 3}] .

我创建了该函数,但我只能访问第一个父级。
function getPath(model, id, parent) {
    if (model == null) {
        return;
    }
    if (model.id === id) {
        console.log(model.id, parent.id)
    }
    if (model.children) {
        model.children.forEach(child => getPath(child, id, model));
    }
}

PS:物体的深度未知。

最佳答案

您可以使用短路来迭代子级并将函数的路径与目标对象一起移交。

function getPath(model, id) {
    var path,
        item = { id: model.id };

    if (!model || typeof model !== 'object') return;

    if (model.id === id) return [item];    
    
    (model.children || []).some(child => path = getPath(child, id));
    return path && [item, ...path];
    
}
const object = { id: "1", name: "a", children: [{ id: "2", name: "b", children: [{ id: "3", name: "c" }] }, { id: "4", name: "d" }] };

console.log(getPath(object, '42')); // undefined
console.log(getPath(object, '3'));  // [{ id: 1 }, { id: 2 }, { id: 3 }]
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用递归获取嵌套对象中的所有父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60915488/

相关文章:

javascript - 如何找到循环中对象数组的总和?

recursion - Prolog 递归 - 满足两个方向(简单)

c - 如何递归遍历目录并打印 C 中的所有文件?

javascript - 在 jQuery 中通过 AJAX 发送表单,然后保存在 MySQL 中,但不起作用

Javascript 正则表达式表示年份

javascript - 菜单打开时移动 View 问题?

c++ - 在 XY 点数组中找到三个 XY 点的最大面积

javascript - 扩展 Backbone.View 时的奇怪行为

javascript - 递归迭代嵌套对象以更改所有出现的键值

javascript - 悬停不适用于图片库