我有从公司的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()
我的函数内。
预期结果是我的碗碟中的碗碟应该有所不同。
答案 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;