javascript - 在 Javascript 中将字符串转换为对象

标签 javascript

我在使用特定映射转换字符串时遇到问题。我要转换的字符串如下:

输入

$B$O$TT$O$$KK$$Z$HH$$U$PP$$QQ$U$Z$B$

可以更好地理解为以下内容(非常接近 HTML):

$B
  $O
    $TT$
  O$
  $K
  K$
  $Z
    $HH$
    $U
      $PP$
      $QQ$
    U$
  Z$
B$

我的目标是将其转化为以下内容:

预期结果

{
  "v": "B",
  "chld": [
    {
      "v": "O",
      "chld": [
        {
          "v": "T"
        }
      ]
    },
    {
      "v": "K"
    },
    {
      "v": "Z",
      "chld": [
        {
          "v": "H"
        },
        {
          "v": "U",
          "chld": [
            {
              "v": "P"
            },
            {
              "v": "Q"
            }
          ]
        }
      ]
    }
  ]
}

这是我得到的地方:

function transform(contentString, currentObj, currentChld) {
  let closeOpen = {
    open: /\$[A-Z]/i,
    closed: /[A-Z]\$/i 
  }

  if (!contentString.length) {
    return currentObj
  }

  let currentSlice = contentString.slice(0, 2)
  let newString = contentString.substring(2)
  //See if tag is open, for example $A is open, A$ is closed
  if (currentSlice.match(closeOpen['open'])){
    currentObj = {v: currentSlice[1]}
    currentObj.chld = []
    return transform(newString,  currentObj , currentChld)

  }

}

似乎递归并没有完全发挥作用。解决方案不必是递归的。如果有更简单的东西那也没关系!我希望能得到上面预期的结果。谁能帮忙?最简单的解决方案最好!

编辑:yes 标签将只有一个字母,仅限于 [A-Z]

最佳答案

我来晚了,但一个简单的基于堆栈的方法工作正常。

var str = "$B$O$TT$O$$KK$$Z$HH$$U$PP$$QQ$U$Z$B$"

function convert(str) {
  var nodes = str.match(/../g)

  var node, parent, stack = [{
    chld: []
  }];

  for (key of nodes) {
    parent = stack.slice(-1)[0]
    if (key[0] == "$") {
      node = {
        v: key[1],
        chld: []
      }
      parent.chld.push(node);
      stack.push(node)
    } else if (key[1] == "$") {
      node = stack.pop()
      if (!node.chld.length) delete node.chld
    }

  }
  return stack.pop().chld[0]
}
console.log(convert(str));

关于javascript - 在 Javascript 中将字符串转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481344/

相关文章:

javascript - 允许 mlab 中的 RESTful DELETE 方法

javascript - 转换数组中的输入值

javascript - 如何在 Javascript 或 Jquery 中设置 "backspace press"事件的监听器?

javascript - 使用 JQuery 切换元素会使父元素的一部分消失

javascript - 通过 JQuery 替换内容 css

javascript - 如何使用 XMLHttpRequest 示例格式化 request.get

javascript - 动态附加值到链接会产生错误的结果

javascript - 页面刷新时本地存储返回空值

javascript - Node.js process.exit()无法完全退出,并且存在异步fs.writeFile的危险

javascript - JSON/Javascript 对象文字语法