将单词替换为嵌套数组中长字符串中的另一个单词

时间:2017-06-19 12:52:08

标签: javascript

我的树木结构中的路径如下:

Node                : /myPath/Node 
     Node-1         : /myPath/Node/Node-1
       Node-1-1     : /myPath/Node/Node-1-1

现在,如果我当前来自Node的对象记录然后来自该节点我希望遍历它的每个子节点并将 Node替换为First。

预期输出将是:

Node                : /myPath/First
     Node-1         : /myPath/First/Node-1
       Node-1-1     : /myPath/First/Node-1-1

我目前的代码问题是它只替换第一个节点的搜索词(第一个),但不替换每个子节点。

var currentObj = 
  {
    "name": "Node",
    "nodes": [
      {
        "name": "Node-1",
        "nodes": [
          {
            "name": "Node-1-1",
            "nodes": [
              {
                "name": "Node-1-1-1",
                "nodes": [
                  
                ],
                "path": "/myPath/Node/Node-1/Node-1-1/Node-1-1-1"
              }
            ],
            "path": "/myPath/Node/Node-1/Node-1-1"
          }
        ],
        "path": "/myPath/Node/Node-1"
      }
    ],
    "path": "/myPath/Node"
  };

recursive(currentObj,"First");
console.log(currentObj);

 function recursive(node,replace)
    {
          console.log(node.path);
           node.path = replaceAll(node.path,'Node',replace);
    } 
      
        function replaceAll(str, find, replace) {
        return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
    }
    
    function escapeRegExp(str) {
        return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
    }

1 个答案:

答案 0 :(得分:1)

递归调用recursive中每个节点的nodes似乎有效:

function recursive(node)
{
    node.path = replaceAll(node.path,'Node','First');
    node.nodes.forEach(recursive);
}

有额外的参数:

node.nodes.forEach(function(child_node) {
    recursive(child_node, arg1, arg2);
});