出于某種我不明白的原因,此代碼將“temps”的值分配給 this.messages,任何幫助將不勝感激。我知道問題出在下面的代碼塊中,因為洗掉 .sort 部分會更改 this.messages 的輸出順序。
this.currentMessageSubject.subscribe(()=> {
console.log('Refreshing messages')
if (this.conversationId) {
firebase.firestore().collectionGroup('conv').where("parentMessageId", "==", this.conversationId).get().then(async (querySnapshot) => {
let temps: FirebaseMessages;
let tempsMsgs = new Map();
temps = this.messages;
temps.messages = []
querySnapshot.forEach((newConvo) => {
const thing = { id: newConvo.id, ...newConvo.data() } as FirebaseMessage;
if (!tempsMsgs.has(thing.id)) {
tempsMsgs.set(thing.id, thing)
temps.messages.push(thing);
}
})
temps.messages.sort(function(a,b){
return a.timestamp.seconds - b.timestamp.seconds;
});
temps.messages = temps.messages.filter((message) => {
if (message.id) {
return true;
}
return false;
})
})
}
})
uj5u.com熱心網友回復:
這樣做時temps = this.messages;,參考被傳遞給temps.
您需要以另一種方式克隆這個物件(注意第 7 行的更改):
this.currentMessageSubject.subscribe(()=> {
console.log('Refreshing messages')
if (this.conversationId) {
firebase.firestore().collectionGroup('conv').where("parentMessageId", "==", this.conversationId).get().then(async (querySnapshot) => {
let temps: FirebaseMessages;
let tempsMsgs = new Map();
temps = {...this.messages};
temps.messages = []
querySnapshot.forEach((newConvo) => {
const thing = { id: newConvo.id, ...newConvo.data() } as FirebaseMessage;
if (!tempsMsgs.has(thing.id)) {
tempsMsgs.set(thing.id, thing)
temps.messages.push(thing);
}
})
temps.messages.sort(function(a,b){
return a.timestamp.seconds - b.timestamp.seconds;
});
temps.messages = temps.messages.filter((message) => {
if (message.id) {
return true;
}
return false;
})
})
}
})
您可以參考此主題以了解更多資訊:在 JavaScript 中深度克隆物件的最有效方法是什么?
uj5u.com熱心網友回復:
如果將非原始值分配給變數(即物件),它將通過參考傳遞。
所以,在你的情況下,這一行:
temps = this.messages;
將您中的相同物件分配this.messages給您的temps變數。因此,編輯temps實際上也會編輯this.messages,因為兩者都指向同一個物件。
您必須克隆您的物件,并將克隆分配給您的temps變數。關于克隆 - 關于在 SO 上克隆物件有多個很好的答案,所以我不會在這里介紹,因為我們不知道messages.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/336765.html
標籤:javascript 有角的 打字稿 离子框架
上一篇:使用多個外鍵級聯洗掉
下一篇:Ionic4:電池狀態不會改變
