1. 程式人生 > 實用技巧 >forEach is not a function

forEach is not a function

問題描述

在寫一個遞迴方法後發現一個問題,該遞迴方法在一個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)
});