2017-09-29 1 views
0

Wenn ich das Element aus der Liste auswählen und speichern auswählen, sollte das Element aus der Liste entfernt werden. Ich kann das ausgewählte Objekt mit dieser Methode abrufen - form.value.selectedMessages - wodurch ich ein Array des ausgewählten Objekts erhalte. Die Gesamtzahl der empfangenen Nachrichten, bei denen es sich um ein Array handelt, ist rMessages. Was hier passiert ist, dass beide Nachrichten entfernt werden und nicht nur die ausgewählte Nachricht. Es ist wahrscheinlich etwas Leichtes, dass ich vermisse. Bin dankbar!Entfernen Sie das ausgewählte Objekt aus dem Array

save(form){ 

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

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

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

    }) 

} 

Daten

Liste der Nachrichten -

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

Ausgewählte Nachricht oder könnten beide

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

sein, wenn man dann unter ausgewählt ist nur

zeigen sollte 10

Antwort

1

Nun, Sie müssen etwas in Ihrer Filterfunktion zurückgeben;

In Ihrem Code gibt es keine Rückkehr. Dies bedeutet, dass standardmäßig undefined zurückgegeben wird, was im Wesentlichen false ist. Da es immer falsch zurückgibt, wird alles aus dem Array gefiltert.

Die Logik sieht auch ein bisschen zweifelhaft.

map wird ein neues Array zurückgeben, was ich glaube nicht, dass das ist, was Sie wollen. Stattdessen könnten Sie find, some oder every basierend auf Ihrer Situation verwenden. Hier ist eine überarbeitete Version des Codes mit find

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

Unten ist ein funktionierendes, modifiziertes Beispiel, aber die Idee ist immer noch die gleiche

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

Diese Antwort leider nicht funktioniert, nichts passiert :(Wenn ich dies logge.rMessages nach der Funktion, kommt nichts zurück. – userlkjsflkdsvm

+0

@userlkjsflkdsvm Sorry, es gab einen Fehler, ich habe die Antwort für Sie angepasst und gab ein funktionierendes Beispiel. –

+0

@userlkjsflkdsvm Der zusätzliche Code, den Sie bereitstellen Ed in Ihrer Frage wird nicht helfen, dies zu debuggen. Ich würde überprüfen, ob die Werte, die Sie an Ihre Funktion weitergeben, korrekt sind. Es scheint, dass der Bug nicht mehr mit dieser Funktion zusammenhängt und möglicherweise nicht mit der ursprünglichen Frage in Verbindung steht. –

Verwandte Themen