我的树木结构中的路径如下:
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");
}
答案 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);
});