Javascript 获取嵌套对象中元素的所有父元素

Javascript 获取嵌套对象中元素的所有父元素,javascript,arrays,object,Javascript,Arrays,Object,我将以下数据存储在变量中: let categories = [ { name: "a", nodes: [ { name: "aa", nodes: [ { name: "aaa" } ]

我将以下数据存储在变量中:

let categories = [
    {
        name: "a",
        nodes: [
            {
                name: "aa",
                nodes: [
                    {
                        name: "aaa"
                    }
                ]
            },
            {
                name: "ab",
            },
            {
                name: "ac",
            },
            {
                name: "ad",
            }
        ]
    },
    {
        name: "b",
        nodes: [
            {
                name: "ba",
            },
            {
                name: "bb",
            },
            {
                name: "bc",
            },
            {
                name: "bd",
            }
        ]
    }
];
我有下面的递归函数,它接受类别变量和名称

function getCategoryParents(categories, name) {
    for (let index = 0; index < categories.length; index++) {
        const category = categories[index];
        if (category.name === name) {
        }
        if (category.nodes && category.nodes.length) {
            category.nodes.forEach(cat => this.getCategoryParents([cat], name));
        }
    }
}
函数getCategoryParents(类别、名称){ for(让index=0;indexthis.getCategoryParents([cat],name)); } } } 我想返回一个名称数组,其中包含参数中的名称以及该名称的父级

例如,如果我调用了
getCategoryParents(categories,“aaa”)
,它应该返回[“a”“aa”“aaa”]。因为aaaaa的父级,aaa的父级


我希望这是清楚的。

我调整了您的函数,以便它在找到匹配项时实际返回一些值:

函数getCategoryParents(arr,名称){ 为了(让arr的孩子){ if(child.name==name){ 返回名称; }else if(child.nodes.length>0){ var x=getCategoryParents(child.nodes,name); 如果(x)返回Array.isArray(x)?[child.name,…x]:[child.name,x]; } } } 设类别=[ { 名称:“a”, 节点:[ { 名称:“aa”, 节点:[ { 名称:“aaa” } ] }, { 名称:“ab” }, { 名称:“ac” }, { 名称:“广告” } ] }, { 名称:“b”, 节点:[ { 姓名:“ba” }, { 姓名:“bb” }, { 姓名:“bc” }, { 姓名:“bd” } ] } ]; 常量结果=getCategoryParents(类别,“aaa”);
console.log(结果);//[“a”、“aa”、“aaa”][child.name,x]。展开不是函数。有没有其他支持的函数可以代替flat使用?@Ayoubk,哦,你使用的是node?我更新了答案