无法读取未定义(递归函数)的属性“符号(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
传递任何内容参数,所以它是undefined
。 undefined
没有迭代器。
【讨论】:
我不明白你的意思。因为默认情况下,当我调用我的函数时,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”