日志 04.06

55 阅读1分钟
 <script>
        const tcData = [
            {
                id: '1000',
                name: '深圳',
                children: [
                    {
                        id: '1001',
                        name: '宝安',
                        children: []
                    },
                    {
                        id: '1002',
                        name: '南山',
                        children: [
                            {
                                id: '1012',
                                name: '粤海街道',
                                children: [
                                    {
                                        id: '1112',
                                        name: '阿里中心',
                                        children: []
                                    },
                                    {
                                        id: '1212',
                                        name: '深圳湾人才公园',
                                        children: []
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                id: '2000',
                name: '广州',
                children: [
                    {
                        id: '2001',
                        name: '越秀区',
                        children: [
                            {
                                id: '2011',
                                name: '人民公园'
                            }
                        ]
                    },
                    {
                        id: '2002',
                        name: '天河区',
                        children: []
                    }
                ]
            }
        ];

        //请实现find函数
        function find(data, id) {
            console.log(data, id);
            // 错误示范:
            // for (let i = 0; i < data.length; i++) {
            //     if (data[i].id && data[i].name && data[i].id == id) {
            //         console.log(data[i]);
            //         return [data[i].name, data[i].id]
            //     } else if (data[i].children && data[i].children.length > 0) {
            //         console.log(data);
            //         find(data[i].children, id)
            //     } else {
            //         return '未找到'
            //     }
            // }


            let res = '未找到'
            function walk(data, id) {
                for (var i = 0; i < data.length; i++) {
                    const it = data[i]
                    if (it.id === id) {
                        res = it.name
                        break
                    } else if (it.children && it.children.length > 0) {
                        walk(it.children, id)
                    }
                }
            }
            walk(data, id)
            return res
            // 递归循环遍历时,递归应该包含每一轮新的遍历,而不应该一整轮遍历包含多个递归
        }

        // console.log(find(tcData, '1000')); // => '深圳'
        console.log(find(tcData, '2001')); // => '越秀区'
        // console.log(find(tcData, '1012')); // => '粤海街道'
        // console.log(find(tcData, '1112')); // => '阿里中心'
        // console.log(find(tcData, '1222')); // => '未找到'
    </script>

递归循环遍历时,递归应该包含每一轮新的遍历,而不应该一整轮遍历包含多个递归