如何递归树并创建父路径节点数组
How to recurse a tree and create an array of parent path nodes?
>我有一棵树,看起来像这样:
{
"name": "A",
"children": [
{
"name": "B",
"children": [
{
"name": "C",
"children": [
{
"name": "D"
},
{
"name": "E"
}
]
},
{
"name": "F"
}
]
},
{
"name": "G",
"children": [
{
"name": "H"
}
]
}
]
}
我想遍历我的树,并为每个节点添加父组件的路径信息。因此,使用我上面的例子,我正在寻找如何生成它:
{
"name": "A",
"path": [
"A"
],
"children": [
{
"name": "B",
"path": [
"A",
"B"
],
"children": [
{
"name": "C",
"path": [
"A",
"B",
"C"
],
"children": [
{
"name": "D",
"path": [
"A",
"B",
"C",
"D"
]
},
{
"name": "E",
"path": [
"A",
"B",
"C",
"E"
]
}
]
},
{
"name": "F",
"path": [
"A",
"B",
"F"
]
}
]
},
{
"name": "G",
"path": [
"A",
"G"
],
"children": [
{
"name": "H",
"path": [
"A",
"G",
"H"
]
}
]
}
]
}
这是设置利用this
的路径的小递归迭代建议。
源:
-
Function#bind()
:
The bind()
方法创建一个新函数,该函数在调用时将其 this 关键字设置为提供的值,并在调用新函数时提供的任何参数序列之前具有给定的参数序列。
-
Array#forEach()
,这个参数:
如果向 forEach() 提供了
。thisArg
参数,则在调用时将传递给回调,以用作其 this 值。否则,将传递值undefined
以用作其此值。最终可由回调观察到的 this 值是根据确定函数看到的 this 的常规规则确定的
function setPath(o) {
o.path = this.concat(o.name);
Array.isArray(o.children) && o.children.forEach(setPath, o.path);
};
var object = { "name": "A", "children": [{ "name": "B", "children": [{ "name": "C", "children": [{ "name": "D" }, { "name": "E" }] }, { "name": "F" }] }, { "name": "G", "children": [{ "name": "H" }] }] };
setPath.bind([])(object);
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');
相关文章:
- 创建动画路径
- 如何在地图上创建路径叠加
- 遍历嵌套的Javascript数组以创建路径
- 如何在HTML中创建一个信息框,显示与悬停SVG路径相关的信息
- 创建从一个位置到另一个位置的路径动画
- 如何从输入到url的路径创建html文件
- Native Phonegap、下载并创建文件、动态命名文件和返回路径
- 如何创建一个浏览按钮,通过该按钮我可以选择系统的任何路径,即C:Program Files.并将其放入文本框中
- 给定一个对象数组,创建一个函数,该函数返回一个 Object,该 Object 具有按类型分组的路径数组
- 如何递归树并创建父路径节点数组
- 如何在 d3 和 SVG 中创建着色路径
- 正确填充 D3 创建的增强 svg 路径
- Rails:我可以将GET请求发送到创建路径吗?
- 织物.js - 在新创建的路径上实现形状识别
- 创建独立于平台的路径字符串
- 我应该如何在 Angular ui 路由器中创建模板网址属性的路径
- 为什么纸张.js路径创建在 iOS 设备上不起作用
- 寻路:如何为路径算法创建路径数据
- 如何创建路径与点符号从对象
- 从像斑点一样的图像的(内部和外部)边缘创建路径