forEach is not a function
阿新 • • 發佈:2021-01-01
問題描述
在寫一個遞迴方法後發現一個問題,該遞迴方法在一個watch監聽欄位中呼叫,於是就報瞭如下錯誤:
Error in callback for watcher 'filterTxt'. list.forEach is not a function
問題解決
第一個callback的問題可能是監聽世間延遲的問題,可以在watch中呼叫方法的地方使用setTimeout解決。
第二個問題是遞迴過程中傳入的引數不是陣列導致的。
解決了遞迴的問題,第一個callback的問題也好了。遞迴過程中第一次傳入的是陣列,第二次傳入的如果是類陣列也會有同樣的問題,所以必須慎重。
如果是類陣列可以考慮轉化成陣列在使用forEach
filterOption() { let label = this.props.label let id = this.props.value let option = [] const getOption = list => { list.forEach(item => { if (item[label].includes(this.filterText)) { option.push({label: item[label], value: item[id]}) if (item.children) { getOption(item.children) // 出錯的地方在這裡 錯誤的直接傳了item導致的 getOption(item) } } }) } getOption(this.data) this.options = option },
備註
const parent = this.el.parentElement; // 這是一個類陣列的node節點集合,此時不可直接使用forEach
Array.prototype.forEach.call(parent.children, child => {
console.log(child)
});