无法读取未定义(递归函数)的属性“符号(Symbol.iterator)”

Posted

技术标签:

【中文标题】无法读取未定义(递归函数)的属性“符号(Symbol.iterator)”【英文标题】:Can not read property 'Symbol (Symbol.iterator)' of undefined (Recursive function) 【发布时间】:2018-05-15 12:00:58 【问题描述】:

我想做一个递归函数。实际上,我希望每次项目的 id 对应于主题或子主题的 id 时,我想将相关项目插入主题或子主题的子主题中: 这是我的功能:

getItemByTheme=(item, themes, tab)=>
  for(let theme of themes)
    if(theme.THEMEID === item.THEMEID )
      item.PARENTID = theme.PARENTID;
      theme.children.push(item)
      return [true, [...tab, theme]]
     else 
      let childItem =  this.getItemByTheme(item,theme.children, [...tab, theme]); 
      console.log(childItem)
    
  
  return [false, tab]

第一个条件(if)有效,但条件(else)无效,返回错误:

无法读取未定义的属性'Symbol (Symbol.iterator)'

我不明白错误来自哪里。

【问题讨论】:

到目前为止解决这个问题的最佳方法不是在 SO 上发布问题,而是使用环境中内置的调试器(IDE 中的调试器,Node 内置-in one that uses Chrome as its UI, your browser's built-in one, etc.) 逐句执行代码,查看变量和参数的值等。 【参考方案1】:

您的代码在 themes (for(let theme of themes)) 和 tab (...tab 在两个地方) 上都使用了迭代器,但是当您进行递归调用时,您不会为 tab 传递任何内容参数,所以它是undefinedundefined 没有迭代器。

【讨论】:

我不明白你的意思。因为默认情况下,当我调用我的函数时,tab 参数是一个空数组: this.getFlowByTheme(item, theme[0], []) @DeGiovanni:是的。然后在其中调用this.getItemByTheme(item,theme.children, [...tab, theme]);。在该电话中,tab 将是 undefined。您只传递了两个参数,但 getItemByTheme 接受并使用 三个 参数。 突然间我必须做些什么来传递一个值选项卡参数,因为我并不总是看到我的错误。 :(

以上是关于无法读取未定义(递归函数)的属性“符号(Symbol.iterator)”的主要内容,如果未能解决你的问题,请参考以下文章

无法读取未定义错误的属性“匹配”

Node.js JsonParser 自定义函数“无法读取未定义的属性”

jQuery - 无法使用 replaceWith() 函数 - 无法读取未定义的属性“createDocumentFragment”

Firebase 函数环境变量无法读取未定义的属性

firebase 云函数无法读取未定义的属性“ref”

未捕获的类型错误:在开关函数开始时无法读取未定义的属性“类型”