# 将指定字符串转化为特定结构的json

字符串仅由小写字母和 [] 组成,且字符串不会包含多余的空格。

示例一: 'abc' --> {value: 'abc'}
示例二:'[abc[bcd[def]]]' --> {value: 'abc', children: {value: 'bcd', children: {value: 'def'}}}

方法1:先转化为字符串数组,再遍历拼接成指定结构json

let normalize = str => {
  let result = {}
  let c
  
  // 字符串转化为数组
  let arr = str.split(/[\[\]]/g).filter(Boolean)
  
  // 生成结构化数据
  arr.forEach((item, index) => {
    if(index != 0) {
      c.children = {}
      c.children.value = item
      c= c.children
    } else {
      result.value = item
      c= result
    }
  })
  
  return result
}
const str='[abc[bcd[def]]]'
console.log(normalize(str))
// {value: 'abc', children: {value: 'bcd', children: {value: 'def'}}}

方法2:先转化为字符串数组,再通过reduce函数直接生成json

const normalize = (str) => {
  var result = {}
  str.split(/[\[\]]/g).filter(Boolean).reduce((obj, item, index, a) => {
    obj.value = item
    if(index !== a.length -1) {
      return (obj.children = {})
    }
  }, result)
  return result
}

const str='[abc[bcd[def]]]'
console.log(normalize(str))

// {
//   value: 'abc',
//   children: { value: 'bcd', children: { value: 'def' } }
// }