【问题标题】:Item not iterable项目不可迭代
【发布时间】:2020-06-11 23:59:09
【问题描述】:

我尝试创建一个搜索功能和过滤功能widt javascript.. 我从 Firebase 获取数据。

也许我只是累了,但我无法到达“this.retter”,因为它不可迭代.. 任何人都可以帮忙 - 我如何参考这个数据列表? :-)

//CLASS AND READ

    class MadService {
  constructor() {
    this.foodRef = firebaseDB.collection("madretter");
    this.userRef = firebaseDB.collection("users");
    this.authUser;
    this.authUserRef;
    this.retter;
    this.read();
  }

  read() {
    // SE DATABASEN OM DER ER ÆNDRINGER
    this.foodRef.onSnapshot(snapshotData => {
      let retter = [];
      snapshotData.forEach(doc => {
        let ret = doc.data();
        ret.id = doc.id;
        retter.push(ret);
      });
      this.appendFood(retter);
    });
  }



//SEARCH FUNCTiONALITY
      //SØGEFUNKITONEN
  search(value) {
    let searchQuery = value.toLowerCase();
    let searchFood = [];
    for (let ret of this.retter) {
      let overskrift = ret.name.toLowerCase();
      if (overskrift.includes(searchQuery)) {
        searchFood.push(ret);
      }
    }
    console.log(searchFood);
    this.appendFood(searchFood);
  }

谢谢! :-)

【问题讨论】:

    标签: javascript firebase google-cloud-firestore iterable


    【解决方案1】:

    this.retter 在您的代码中是 undefined。在尝试对其进行迭代之前,您需要在某个时刻将其初始化为 iterable。下面是一个将其初始化为数组的示例(注意构造函数中的this.retter = [];)。

    我添加了addPhonyData 方法并注释掉了一些内容,因此代码可以作为示例:

    //CLASS AND READ
    
    class MadService {
      constructor() {
        this.foodRef; // = firebaseDB.collection("madretter");
        this.userRef; // = firebaseDB.collection("users");
        this.authUser;
        this.authUserRef;
        this.retter = [];
        //this.read();
        this.addPhonyData();
      }
    
      read() {
        // SE DATABASEN OM DER ER ÆNDRINGER
        this.foodRef.onSnapshot(snapshotData => {
          let retter = [];
          snapshotData.forEach(doc => {
            let ret = doc.data();
            ret.id = doc.id;
            retter.push(ret);
          });
          this.appendFood(retter);
        });
      }
    
      addPhonyData() {
        this.retter.push({
          name: 'DuMMy'
        });
      }
    
      search(value) {
        let searchQuery = value.toLowerCase();
        let searchFood = [];
        for (let ret of this.retter) {
          let overskrift = ret.name.toLowerCase();
          if (overskrift.includes(searchQuery)) {
            searchFood.push(ret);
          }
        }
        console.log(searchFood);
        //this.appendFood(searchFood); - not defined
      }
    }
    
    const ms = new MadService();
    
    ms.search('dummy');

    【讨论】:

    • 但我有一个 appendFood() 函数:appendFood(retter) { let htmlTemplate = ""; for (let ret of retter) { htmlTemplate += `
      Blablabla...
      `; } document.querySelector('#mad-container').innerHTML = htmlTemplate; } 为什么我能做到这一点?
    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2011-02-11
    • 2018-12-25
    • 2017-12-13
    • 2018-01-26
    • 2017-03-05
    相关资源
    最近更新 更多