Javascript 递归语句,通过嵌套对象/数组循环-但它如何知道这样做?(JS算法)

Javascript 递归语句,通过嵌套对象/数组循环-但它如何知道这样做?(JS算法),javascript,algorithm,recursion,Javascript,Algorithm,Recursion,问题 我们正在尝试循环遍历一系列子对象,并将它们的名称打印到控制台上。但如果这些孩子有孩子,我们也需要把他们打印出来 我这里有一个解决方案: 函数printChildrenRecursive(t){ if(t.childrence.length==0){ 返回 } t、 choldren.forEach(child=>{ console.log(child.name) PrintChildrenRecursive(儿童) }) } 常数树={ 姓名:'约翰', 儿童:[ { 名字:“吉姆”,

问题

我们正在尝试循环遍历一系列子对象,并将它们的名称打印到控制台上。但如果这些孩子有孩子,我们也需要把他们打印出来

我这里有一个解决方案:

函数printChildrenRecursive(t){ if(t.childrence.length==0){ 返回 } t、 choldren.forEach(child=>{ console.log(child.name) PrintChildrenRecursive(儿童) }) } 常数树={ 姓名:'约翰', 儿童:[ { 名字:“吉姆”, 儿童:[] }, { 名字:“佐伊”, 儿童:[ {name:'凯尔,孩子们:[]}, {姓名:'索菲亚,孩子们:[]} ] }
}您的代码中有几个拼写错误。我更正了它们,并将您的代码嵌入到一个HTML文件中,请参见下文,这对我很有用

这是包含代码的HTML页面(更正的拼写错误):

你还要求解释:

  • 定义了一个函数
    printChildrenRecursive(t)
    ,它接受一个参数
    t
    t
    可以是任何对象(这是JavaScript),但代码将假定
    t
    具有某些属性,如
    t.children
    • 代码本身检查
      t
      的属性
      子属性
      是否具有值为零的属性
      length
      。如果是,函数将终止
    • 否则,对于
      t
      的每个子级,将执行一个新函数:
    • 打印孩子的名字
    • 执行函数
      printChildrenRecursive
      ,并将当前的
      child
      分配给参数
      t
  • 定义了一个名为
    tree
    的常量,它是一个包含键值对的对象,例如,key
    name
    映射到值
    'John'
    ,还有一个key
    children
    映射到包含更多对象的数组
  • printChildrenRecursive(tree)
    启动函数
    printChildrenRecursive(t)
    的执行,并指定
    tree
    作为参数
    t

这有意义吗?

您的代码中有几个拼写错误。我更正了它们,并将您的代码嵌入到一个HTML文件中,请参见下文,这对我很有用

function printChildrenRecursive(object) {
  if (object.children.length > 0) {
   object.children.forEach((child) => {
    console.log(`${object.name}: ${child.name}`);
    printChildrenRecursive(child);
   });
  }
}

const object = {
  name: 'John',
  children: [
    {
      name: 'Jim',
      children: []
    },
    {
      name: 'Zoe',
      children: [
        {
          name: 'Kyle',
          children: []
        },
        {
          name: 'Sophia',
          children: []
        },
      ]
    }
  ]
};

printChildrenRecursive(object);
这是包含代码的HTML页面(更正的拼写错误):

你还要求解释:

  • 定义了一个函数
    printChildrenRecursive(t)
    ,它接受一个参数
    t
    t
    可以是任何对象(这是JavaScript),但代码将假定
    t
    具有某些属性,如
    t.children
    • 代码本身检查
      t
      的属性
      子属性
      是否具有值为零的属性
      length
      。如果是,函数将终止
    • 否则,对于
      t
      的每个子级,将执行一个新函数:
    • 打印孩子的名字
    • 执行函数
      printChildrenRecursive
      ,并将当前的
      child
      分配给参数
      t
  • 定义了一个名为
    tree
    的常量,它是一个包含键值对的对象,例如,key
    name
    映射到值
    'John'
    ,还有一个key
    children
    映射到包含更多对象的数组
  • printChildrenRecursive(tree)
    启动函数
    printChildrenRecursive(t)
    的执行,并指定
    tree
    作为参数
    t

这有意义吗?

通常需要遍历嵌套数据,而不仅仅是将名称打印到控制台。因此,将遍历和计算效果分开是很有用的-

function printChildrenRecursive(object) {
  if (object.children.length > 0) {
   object.children.forEach((child) => {
    console.log(`${object.name}: ${child.name}`);
    printChildrenRecursive(child);
   });
  }
}

const object = {
  name: 'John',
  children: [
    {
      name: 'Jim',
      children: []
    },
    {
      name: 'Zoe',
      children: [
        {
          name: 'Kyle',
          children: []
        },
        {
          name: 'Sophia',
          children: []
        },
      ]
    }
  ]
};

printChildrenRecursive(object);
const树=
{姓名:'John',子女:[{姓名:'Jim',子女:[]},{姓名:'Zoe',子女:[{姓名:'Kyle',子女:[]},{姓名:'Sophia',子女:[]}]
常量遍历=函数*(节点={})
{屈服点
if(节点子节点)
for(节点子节点的常数c)
收益率*横向(c)
}

对于(遍历(树)的const node))//来说,通常需要遍历嵌套数据,而不仅仅是将名称打印到控制台。因此,将遍历和计算效果分开是很有用的-

const树=
{姓名:'John',子女:[{姓名:'Jim',子女:[]},{姓名:'Zoe',子女:[{姓名:'Kyle',子女:[]},{姓名:'Sophia',子女:[]}]
常量遍历=函数*(节点={})
{屈服点
if(节点子节点)
for(节点子节点的常数c)
收益率*横向(c)
}

for(const node of transverse(tree))//对不起,谢谢,这是一个键入错误,因为我必须手动将其写出。(我从视频中获取)但是我仍然无法理解,typo asideI修改了答案,纠正了更多的拼写错误,并在创建了一个正常工作的HTML页面之后。这是有意义的,我唯一要解决的问题是函数如何知道查看嵌套对象的子对象以及原始子对象。非常感谢调用
t.children.for每个(child=>{console.log(child.name)printChildrenRecursive(child)})
迭代所有子级,并将当前子级分配给
child
。这在内部函数
{…}中使用
。现在,在该内部函数中,使用console打印当前
子对象的名称。下一行调用主函数
printChildrenRecursive
,但这次将当前子对象作为参数(而不是
对象)。这样,函数为每个子函数调用自己。对不起,我很感激,这是一个键入错误,因为我必须手动将其写出来。(我从视频中获取的)但我仍然无法理解,键入asideI修改了答案,
function printChildrenRecursive(object) {
  if (object.children.length > 0) {
   object.children.forEach((child) => {
    console.log(`${object.name}: ${child.name}`);
    printChildrenRecursive(child);
   });
  }
}

const object = {
  name: 'John',
  children: [
    {
      name: 'Jim',
      children: []
    },
    {
      name: 'Zoe',
      children: [
        {
          name: 'Kyle',
          children: []
        },
        {
          name: 'Sophia',
          children: []
        },
      ]
    }
  ]
};

printChildrenRecursive(object);