Nat*_*iya 3 arrays tree list node.js
我有一个树对象,它是不规则的树,每当我运行代码时,孩子的名字和键值就可以更改。例如:
{
addressRouter: 192.168.0.1,
addresses:
{
address1: 'A',
},
{
address2: 'B',
},
{
ports: [
{
portA: 'C',
portB: null
},
}
route: 'D',
}
Run Code Online (Sandbox Code Playgroud)
所以名称:“ addressRouter”,“ addresses”,“ address1”等及其键是不可预测的,但是我需要将树对象转换为以下格式的数组:
addressRouter
addresses/address1
addresses/address2
addresses/ports/portA
addresses/ports/portB
route
Run Code Online (Sandbox Code Playgroud)
然后把钥匙放在旁边。
我有此功能来构造树,这是正确的:
const iterate = (obj, obj2) => {
Object.keys(obj).forEach(key => {
obj2[key] = obj[key];
if (typeof obj[key] === 'object') {
iterate(obj[key], obj2)
}
})
}
Run Code Online (Sandbox Code Playgroud)
但是在调试之后,我意识到它并没有获得所有分支。
我们可以使用递归函数遍历树并以所需格式获取键。
我假设给定树对象中的地址是对象数组
function processTree(obj, rootKey) {
const arr = [];
obj && Object.keys(obj).forEach(key => {
const val = obj[key];
if (val && val instanceof Array) {
val.forEach(item => arr.push(...processTree(item, key)))
}else if (val && typeof(val) == "object") {
arr.push(...processTree(val, key));
}else {
arr.push(key);
}
});
return rootKey ? arr.map(item => rootKey + "/" + item) : arr;
}
console.log(processTree(tree, null));
Run Code Online (Sandbox Code Playgroud)
结果: ["addressRouter", "addresses/address1", "addresses/address2", "addresses/ports/portA", "addresses/ports/portB", "route"]
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |