为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取树结构的每个节点的值

如何获取树结构的每个节点的值

肥皂起泡泡 2021-12-02 15:13:51
一个嵌套数组和对象的数组,每个节点都有一个唯一的值,在这个数据上找一个值,如何获取每个节点上的值?const opts = [    {        value: '01',        children: [            { value: '0198' },            { value: '0195', children: [{ value: '09977' }] }        ]    },    {        value: '02',        children: [            { value: '01986' },            {                value: '0195',                children: [                    { value: '09978', children: [{ value: '09864' }, { value: '90876' }] }                ]            }        ]    }];const code = '90876';// expected get an array ['02','0195','09978','90876']
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

你可以使用一个函数来递归遍历对象结构,就像这里描述的那样:


const opts = [

    {

        value: '01',

        children: [

            { value: '0198' },

            { value: '0195', children: [{ value: '09977' }] }

        ]

    },

    {

        value: '02',

        children: [

            { value: '01986' },

            {

                value: '0195',

                children: [

                    { value: '09978', children: [{ value: '09864' }, { value: '90876' }] }

                ]

            }

        ]

    }

];



function eachRecursive(obj, cb) {

    for (var k in obj) {

        if (typeof obj[k] == "object" && obj[k] !== null)

            eachRecursive(obj[k], cb);

        else

            cb(obj[k]);

    }

}


let results = [];


eachRecursive(opts, val => results.push(val));

console.log(results);


但不确定你的评论是什么意思:// expected get an array ['02','0195','0997','90876']你能解释一下你为什么期望吗?


查看完整回答
反对 回复 2021-12-02
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

你可以使用dfs算法


function dfs(o, target){

    if(o.value == target) return [target];

    if(!o.children) return false;

    let path;

    o.children.find(x=>path=dfs(x, target));

    if(path){

        return [o.value].concat(path);

    }

};


const opts = [

    {

        value: '01',

        children: [

            { value: '0198' },

            { value: '0195', children: [{ value: '09977' }] }

        ]

    },

    {

        value: '02',

        children: [

            { value: '01986' },

            {

                value: '0195',

                children: [

                    { value: '09978', children: [{ value: '09864' }, { value: '90876' }] }

                ]

            }

        ]

    }

];


let path;

opts.find(x=>path=dfs(x, '90876'))

console.log(path);


查看完整回答
反对 回复 2021-12-02
?
慕仙森

TA贡献1827条经验 获得超7个赞

const opts = [

    {

        value: '01',

        children: [

            { value: '0198' },

            { value: '0195', children: [{ value: '09977' }] }

        ]

    },

    {

        value: '02',

        children: [

            { value: '01986' },

            {

                value: '0195',

                children: [

                    { value: '09978', children: [{ value: '09864' }, { value: '90876' }] }

                ]

            }

        ]

    }

];

console.log(opts[1].value)

console.log(opts[1].children[1].value)

console.log(opts[1].children[1].children[0].value)

console.log(opts[1].children[1].children[0].children[1].value)


查看完整回答
反对 回复 2021-12-02
  • 3 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信