2017-06-19 26 views
0

我的道路就像低于我的树结构:在长字符串与另一个词替换词在嵌套数组

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

现在,如果从节点我目前的目标记录,然后从该节点我想每行进孩子它的节点并用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

递归调用recursivenodes每个节点似乎工作:

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); 
}); 
+0

好upvoted你对帮助样的努力我,但如果suppos e我在递归方法中有2个参数,那么如何使用循环调用递归方法? –

+0

我已经采取了一个名为searchTerm的变量,我已将该值赋予该变量,因此我将searchTerm作为参数传递给递归函数,而不是在replaceAll函数中对其进行硬编码,但问题是在递归调用第二次时它会丢失 –

+0

我已经更新了答案,以显示如何添加额外参数。 – ikkuh

相关问题