如何解决如何使用两个参数创建一个函数来查找节点是否存在?
我不知道是否有类似的方法:对象或映射来检查嵌套对象。
我遇到的问题是我在其他对象中有对象。 :/
我认为代码应该更深: node.children[1].children[0].children[0].children[0].name;
但我无法以这种方式创建递归函数。
const rootNode = {
name: "node1",children: [
{
name: "node2",children: [
{
name: "node3",tag: 251,},]
},{
name: "node4",children: [
{
name: 'node5',children: [
{
name: "node7",children: [
{
name: 'node8',children: [
{
name: "node6"
},],]
}
// YOU CAN MODIFY THIS PART ONLY
/**
* Search a node by name inside a node
* @param node Any node to start the search in
* @param nodeName The name to search
* @returns undefined when no node is found or the founded node
*/
const searchInNodeByName = (node,nodeName) => {
}
// HERE ENDS WHAT YOU CAN MODIFY
const valueIsRecord = (value) => value !== null
&& typeof value === 'object'
&& !Array.isArray(value)
const node6 = searchInNodeByName(rootNode,'node6')
if (
node6 === undefined
|| !valueIsRecord(node6)
|| node6.name !== 'node6'
) {
throw new Error('node6 should be found')
}
const node10 = searchInNodeByName(rootNode,'node10')
if (node10 !== undefined) {
throw new Error('node10 should not be found')
}
const node3 = searchInNodeByName(rootNode,'node3')
if (
node3 === undefined
|| !valueIsRecord(node3)
|| node3.name !== 'node3'
|| node3.tag !== 251
) {
throw new Error('node3 should be found')
}
console.log('IF YOU SEE THIS ON YOUR CONSOLE,YOU ARE DONE!')
解决方法
const searchInNodeByName = (node,nodeName) => {
if (node['name'] == nodeName) {
return node;
}
else if (node['children'] != undefined) {
for (let i = 0; i < node['children'].length; i++) {
var checkChild = searchInNodeByName(node['children'][i],nodeName);
if (checkChild !== undefined) {
return checkChild;
}
}
}
return undefined;
}
此函数将检查给定的第一个节点,如果名称等于 nodeName 参数,则返回该节点。否则,如果该节点中有子节点,它将遍历所有子节点,并执行递归函数到达节点参数内的所有节点,优先处理节点对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。