如何使用两个参数创建一个函数来查找节点是否存在?

何塞·安东尼奥·门多萨·查韦斯

我不知道是否有这样的方法:对象或地图来检查嵌套对象。

我的问题是我在其他对象中有对象。:/

我认为代码应该更深入: 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 参数,则返回该节点。否则,如果该节点中有子节点,它将遍历所有子节点,并执行递归函数以到达节点参数内的所有节点,优先处理节点对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建一个函数来查找给定两个参数的可整除位数

如何在 C 中创建一个函数来检查两个矩阵是否具有相同的维度

比较两个xml树节点并使用xslt查找另一个节点中是否存在具有值的节点

是否有一个zip函数来创建包含两个以上元素的元组?

创建一个有两个参数的函数,参数 a 将是一个数组,参数 b 将在数组中查找一个元素

创建一个函数来测试两个范围之间的值

检查一个节点的值是否等于前两个节点的值的树函数

如何使用一个参数来实现函数来交换对象的私有内容

如何创建一个函数来接受参数并在调用时增加参数?

创建一个函数来检查malloc是否成功

您将如何创建一个函数来使用 python 查找少于 4 个字符的单词的频率?

是否有一个函数分别使用两个转换函数来转换/映射“左”和“右”情况?

无法弄清楚如何创建一个以两个日期参数为范围并检查日期之间是否为回文的函数

如何创建一个函数来查找字符串中的重复项?

如何创建一个函数来查找可被 7 整除但不能被 5 整除的数字

如何创建一个JavaScript函数来查找彼此嵌套的对象和数组

我们如何创建一个递归函数来查找数字的最高位数?

如何编写一个scala函数来接受两种类型的参数?

在 JS 中,如何编写一个带有两个参数(数组、元素)的函数来将元素 .unshift 转换为新数组?

创建一个函数来获取另一个函数的参数输入

如何使泛型对象使用在Typescript中使用一个类型或void的两个函数的函数参数

我如何创建一个函数来测试输入是否包含任何字符?

如何创建一个函数来计算年份?

如何定义一个函数来创建列表

如何创建一个函数来选择特定的数组?

创建一个函数来打印指数而不使用 **

一个函数调用中的两个参数

如何制作一个函数来找出两个等长数组的每个元素之间的差异

当一个函数接受多个参数时,如何合并两个函数?