递归进行数据处理,数据平铺(flatten)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        let options = [
            {
                value: "330000",
                label: "浙江省",
                children: [
                    {
                        value: "330100",
                        label: "杭州市",
                        children: [
                            {
                                value: "330106",
                                label: "西湖区",
                            },
                            {
                                value: "330107",
                                label: "余杭区",
                            },
                        ],
                    },
                    {
                        value: "330200",
                        label: "温州市",
                        children: [
                            {
                                value: "330206",
                                label: "龙湾区",
                            },
                        ],
                    },
                ],
            },
            {
                value: "120000",
                label: "新疆维吾尔自治区",
                children: [
                    {
                        value: "120100",
                        label: "博尔塔拉蒙古自治州",
                        children: [
                            {
                                value: "120111",
                                label: "阿拉山口市",
                            },
                        ],
                    },
                ],
            },
        ];
        let arr = [];
        function flattenTree(options, label) {

            // 1.先遍历数组
            for (let i = 0; i < options.length; i++) {
                // label 为undefined 为第一次进来
                if (!label) {
                    arr.push([{
                        value: options[i].value,
                        label: options[i].label
                    }])
                } else {
                    // console.log(arr,options, label)
                    let list = arr.filter(function (item) {
                        return item[item.length - 1].label == label
                    })
                    // 查找到有相同的元素
                    if (list.length > 0) {
                        let list1 = list[0].slice();
                        list1.push({
                            value: options[i].value,
                            label: options[i].label
                        });
                        arr.push(list1);
                        if(i == options.length-1){
                            // 如果是最后一个元素 就把上一个元素删除
                            // 将原本的元素的进行删除,留下迭代后的元素
                            arr.splice(arr.indexOf(list[0]),1)
                        }
                    }
                }
                if (options[i].children) flattenTree(options[i].children, options[i].label)
            }
        }
        // flattenTree(options)
        // console.log(arr)


        /* 
        
        [
            [{label:浙江,value:330000}],
            [{label:新疆,value:320000}]
        ]
        */

        /* 
        
        */
       let obj1 = {
           value:1,
           prop:{
               value:2,
               prop:{
                   value:3,
                   prop:{
                       value:4,
                       prop:{
                           value:5
                       }
                   }
               }
           }
       }
       while(obj1){
        console.log(obj1.value);
        obj1 = obj1.prop;
       }
    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值