为什么array.push()无法正常工作?

时间:2019-02-01 19:21:16

标签: node.js angular ionic-framework

我有从公司的FireStore数据库返回的菜肴阵列的功能。 随着CONSOLE.LOG我检查的菜我想推的格式是否正确,然后将其推。

最后,我CONSOLE.LOG阵列,以检查是否一切正常。 这是我得到的:

https://image.noelshack.com/fichiers/2019/05/5/1549048418-arraypush.png

switch (type) {
  case "Plats": {
    this.nourritureCollection.ref.get().then(data => {

      let platArray : Plat[] = [];
      data.docs.forEach(doc => {
        this.plat.name = doc.data().nourritureJson.name;
        this.plat.price = doc.data().nourritureJson.price;
        this.plat.ingredients = doc.data().nourritureJson.ingredients;
        this.plat.type = doc.data().nourritureJson.type;
        this.plat.availableQuantity = doc.data().nourritureJson.availableQuantity;
        this.plat.isAvailableOffMenu = doc.data().nourritureJson.isAvailableOffMenu;
        this.plat.imgUrl = doc.data().nourritureJson.imgUrl;
        this.plat.temp = doc.data().nourritureJson.temp;
        console.log(this.plat)
        platArray.push(this.plat);
      });

      console.log(platArray)
      return platArray;
    });
    break;
  }...

高原是我的服务组件内实例化的,我无法声明一个新的Plat()我的函数内。

预期结果是我的碗碟中的碗碟应该有所不同。

1 个答案:

答案 0 :(得分:-1)

您将在每次迭代中更新this.plat。因此,它将在数组中指向同一个对象的引用有n个,因此,所有数组元素的值都是this.plat

的最后更新值

您需要为每次迭代创建new Plat对象。

data.docs.forEach(doc => {
        let plat: Plat = new Plat();
        plat.name = doc.data().nourritureJson.name;
        plat.price = doc.data().nourritureJson.price;
        plat.ingredients = doc.data().nourritureJson.ingredients;
        plat.type = doc.data().nourritureJson.type;
        plat.availableQuantity = doc.data().nourritureJson.availableQuantity;
        plat.isAvailableOffMenu = doc.data().nourritureJson.isAvailableOffMenu;
        plat.imgUrl = doc.data().nourritureJson.imgUrl;
        plat.temp = doc.data().nourritureJson.temp;
        console.log(plat)
        platArray.push(plat);
      });

如评论中所指出,如果new Plat()Plat,则只能使用class;如果是interface,则只能使用let plat:Plat;