取出树结构中所有name的值

// 需求:递归获取数据中的所有name


let obj = {
    name:'xx',
    children:[
        {
            name:'ff',
            age:'11',
            children:[{
                name:'sss',
                age:2222,
                children:[{
                    name:{ss:11},
                    age:77
                }]
            }]
        },
    ]
}
//两种数据结构
//数据结构1: object { name, chidren [ ]} 
//数据结构2:object [{name, chidren[]},{name,chidren[]}]
复制代码

//方法1 对数据结构1和数据结构2都适用
let getName = (obj)=>{
    let isArr = Array.isArray(obj);
    let reslut = [];
    if(isArr){
        obj.forEach(item => {
            reslut.push(...getName(item));
        });
    }else{
        reslut.push(obj.name)
        if(obj.children){
            reslut.push(...getName(obj.children));
        }
    }
    return reslut;
}
console.log(getName(obj))
复制代码

//方法2: 针对数据结构1
let getResult = (data,list=[])=>{
    list.push(data.name);
    let isArr = Array.isArray(data.children);
    if(isArr){
        data.children.forEach(item=>{
            getResult(item,list)
        })
    }
    return list;
}
console.log(111);
console.log(getResult(obj))
复制代码
//方法3: 使用JSON.stringify API
let names = [];
// console.log(JSON.stringify(obj))
JSON.stringify(obj,(key,value)=>{
    if(key==='name') names.push(value)
    return value
})
console.log(names)
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享