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

一个嵌套数组和对象的数组,每个节点都有一个唯一的值,在这个数据上找一个值,如何获取每个节点上的值?


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']


肥皂起泡泡
浏览 168回答 3
3回答

12345678_0001

你可以使用一个函数来递归遍历对象结构,就像这里描述的那样: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']你能解释一下你为什么期望吗?

汪汪一只猫

你可以使用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);

慕仙森

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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript