特殊字符串转成树形结构

// 方法一

      let normalize = (str) => {

        let arr = str.split(/[\[\]]/g).filter(Boolean)

        let result = {}

        let obj = result;

        while(key = arr.shift()) {

          obj.value = key

          if(!arr.length) break;

          obj.children = {} // 注意这里的obj和result是共同指向一个堆内存,obj有的result也有,并且后面改变obj的指向也不会改变result的内容,因为之前的赋值是浅拷贝

          obj = obj.children // 这里的obj不仅赋值为空对象,它的指向与result的children的指向相同,后面obj有的result的children也有

        }

        console.log(result)

      }

      // 方法二

      let normalize = (str) => {

        let arr = str.split(/[\[\]]/g).filter(Boolean)

        let result = {}

        arr.reduce((pre, cur, index, self) => {

          pre.value = cur

          if(index !== self.length - 1) {

            pre.children = {}

            return pre.children

          } else {

            return pre

          }

        }, result)

        console.log(result)

      }

      normalize('[abc[def[gh]]]')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值