通过JavaScript中的嵌套对象进行程序导航



我有一个嵌套对象和一个路径,该路径描述对象中的位置。我想用给定的路径访问树末尾的对象。例如,我想获取对象的id,路径为"contracts/access/roles/MinterRole.sol">。我该怎么做?是否可以不在整个树上递归迭代?非常感谢。

我的对象如下所示:

{  
"name":"contracts",
"toggled":true,
"id":0,
"children":[  
{  
"name":"access",
"toggled":false,
"id":1,
"children":[  
{  
"name":"Roles.sol",
"id":2,
"path":"contracts/access/Roles.sol",
"dependencies":[  
]
},
{  
"name":"roles",
"toggled":false,
"id":3,
"children":[  
{  
"name":"CapperRole.sol",
"id":4,
"path":"contracts/access/roles/CapperRole.sol",
"dependencies":[  
{  
"fileName":"Roles.sol",
"absolutePath":"contracts/access/Roles.sol"
}
]
},
{  
"name":"MinterRole.sol",
"id":5,
"path":"contracts/access/roles/MinterRole.sol",
"dependencies":[  
{  
"fileName":"Roles.sol",
"absolutePath":"contracts/access/Roles.sol"
}
]
},
{  
"name":"PauserRole.sol",
"id":6,
"path":"contracts/access/roles/PauserRole.sol",
"dependencies":[  
{  
"fileName":"Roles.sol",
"absolutePath":"contracts/access/Roles.sol"
}
]
},
{  
"name":"SignerRole.sol",
"id":7,
"path":"contracts/access/roles/SignerRole.sol",
"dependencies":[  
{  
"fileName":"Roles.sol",
"absolutePath":"contracts/access/Roles.sol"
}
]
}
]
}
]
}
]
}

我会在斜杠处拆分路径,然后遍历它。如果将整个对象封装在数组中,会更容易。

const pathParts = path.split("/");
let currentNode = mainTree;
pathParts.forEach(part => {
if (currentNode && currentNode.children) {
currentNode = currentNode.children.find(child => child.name === part);
}
});

请注意,虽然这是迭代的,但它仍将停止在与路径名匹配的给定级别上的节点,跳过之后的任何内容。只要树不是有序的(即二叉树或其他什么(,这就是你能做的最好的事情

递归是最好的方法。

你可能想看看D.Crockford自己的半著名的遍历DOM片段。

您想要做的是根据您的数据调整该片段,并使用额外的逻辑来增强代码,以便在找到结果时停止递归。

最新更新