js对象数组

有如下数据,可能会无限嵌套下去,希望能把所有的id拿出来放到一个数组中,怎么写比较好呢?

let arr = [
    {
        id: 1,
        name: '小红',
        children: [
            {
                id: 2,
                name: '小绿',
                children: [
                    {
                        id: 3,
                        name: '小黑',
                        children: [
                            {
                                id: 4,
                                name: '小黑',
                                children: [
                                    {
                                        id: 5,
                                        name: '小黑',
                                        children: [
                                            {
                                                id: 6,
                                                name: '小黑',
                                                children: [
                                                    {
                                                        id: 7,
                                                        name: '小黑',
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
];

console.log(arr1);//[1,2,3,4,5,6,7]
阅读 2.5k
4 个回答
JSON.stringify(arr).match(/(?<="id":)\d+/g).map(x => parseInt(x))
let arr = [
    {
        id: 1,
        name: '小红',
        children: [
            {
                id: 2,
                name: '小绿',
                children: [
                    {
                        id: 3,
                        name: '小黑',
                        children: [
                            {
                                id: 4,
                                name: '小黑',
                                children: [
                                    {
                                        id: 5,
                                        name: '小黑',
                                        children: [
                                            {
                                                id: 6,
                                                name: '小黑',
                                                children: [
                                                    {
                                                        id: 7,
                                                        name: '小黑',
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
];


const getNodeAllKeys =(arr,key,res=[])=>(arr.forEach(item=>(res.push(item[key]),getNodeIds(item.children||[],key, res))),res)
console.log(getNodeAllKeys(arr,'id'));//  [1, 2, 3, 4, 5, 6, 7]
新手上路,请多包涵
let arr2 = [];
function getId(arr){
    arr.forEach(item=>{
    arr2.push(item.id);
     if(item.children){
       getId(item.children)
       }
    })
}
getId(arr);

赚个分

function id(arr) {
    return arr.reduce((ids, item) => {
        ids.push(item.id)
        if(item.children) {
            ids.push(...id(item.children))
        }
        return ids
    }, [])
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题