2017-09-29 200 views
0

當我從列表中選擇項目並選擇保存時,應從列表中刪除項目。我能夠使用此方法檢索選定的項目 - form.value.selectedMessages - 它給我一個我選擇的對象的數組。接收到的數組的總數是rMessages。這裏發生的是我的兩條消息都被刪除,而不僅僅是被選中的消息。這可能是我錯過的一件容易的事。欣賞它!從數組中刪除所選對象

save(form){ 

    this.rMessages = this.rMessages.filter(resultTwo => { 

     form.value.selectedMessages.map(resultOne => { 

     return resultTwo.messageID !== resultOne.messageID 
     }) 

    }) 

} 

數據

消息的列表 - 如果一個被選中,那麼下面應僅顯示

[{messageID: 1, message: "message One"}, 
{messageID: 2, message: "message Two"}] 

選定消息,或者可以是兩者

[{messageID: 1, message: "message One"}] 

回答

1

那麼開始你需要在你的過濾器函數中返回一些東西;

在你的代碼中沒有任何回報。這意味着它將默認返回undefined,這基本上是false。因爲它總是返回false,所以從數組中過濾所有內容。

該邏輯也看起來有點狡猾。

map將返回一個新的數組,我不認爲這就是你想要的。相反,您可以根據您的情況使用findsomeevery。 這裏是你的代碼的重新設計版本find

this.rMessages = this.rMessages.filter(resultTwo => { 
     return !form.value.selectedMessages.find(resultOne => { 
      return resultTwo.messageID === resultOne.messageID 
     }) 
    }) 

下面是一個工作,修改實例但這個想法仍然是相同的

var rMessages = [1,2,3,4,5].map(item => {return {messageID:item}}); 
 
var selected = [2,5].map(item => {return {messageID:item}}); 
 
var form = { 
 
\t value:{ 
 
\t \t selectedMessages:selected 
 
\t } 
 
}; 
 
rMessages = rMessages.filter((resultTwo) => { 
 
    return !form.value.selectedMessages.find((resultOne) => { 
 
    return resultTwo.messageID === resultOne.messageID 
 
    }) 
 
}) 
 
    
 
console.log(rMessages)

+0

這個答案並不很遺憾工作,沒有什麼發生:(當我登錄的功能之後this.rMessages,什麼也不回來了。 – userlkjsflkdsvm

+0

@userlkjsflkdsvm很抱歉,一個bug,我調整了爲你解答,並給工作示例。 –

+0

@userlkjsflkdsvm你provid附加碼在你的問題編輯不會幫助調試這個。我會檢查你認爲你傳遞給你函數的值是否正確。看來這個bug跟這個函數沒有關係,並且可能與原始問題 –