blog icon indicating copy to clipboard operation
blog copied to clipboard

[a[b[c]]]转换为树结构

Open wuxianqiang opened this issue 4 years ago • 0 comments

function normalize (str) {
  let s = [];
  let list = [];
  let obj = {}
  for (let i = 0; i < str.length; i++) {
    let value = str[i]
    switch (value) {
      case '[':
        s.push(i)
        break;
      case ']':
        let leftIndex = s.pop();
        list.unshift([leftIndex, i])
      default:
        break;
    }
  }
  let [start, end] = list[0]
  let parent = obj
  for (let i = 1; i < list.length; i++) {
    let [a, b] = list[i];
    let result = str.slice(start + 1, a) + str.slice(b + 1, end);
    start = a;
    end = b;
    parent.value = result;
    parent.children = {};
    parent = parent.children;
  }
  let [x, y] = list[list.length - 1]
  parent.value = str.slice(x + 1, y)
  return obj
}

wuxianqiang avatar Mar 27 '20 14:03 wuxianqiang