2017-05-23 3 views
-1

Ich habe ein Array namens blog.likes, und ich möchte überprüfen, ob die ID des aktuell angemeldeten Benutzers (req.user._id) bereits existiert die Reihe von Likes. Wenn dies der Fall ist, löschen Sie die ID aus dem Array, wenn sie die Benutzer-ID nicht innerhalb des Arrays hinzufügt. Mit dem Code, den ich jetzt habe, wenn ich den Like-Button einmal gedrückt habe, gefällt mir der Post, wenn ich ihn erneut drücke, löscht er den Like, aber wenn ein Post ein Like hat und ich mich mit einem anderen Benutzer anmelde und den Like-Button mehrfach drücke, startet es um alle Likes zu löschen, nicht nur die Likes, die von einem Benutzer erstellt wurden.Finden, ob eine Zeichenfolge bereits in einem Array von Zeichenfolgen vorhanden ist -javascript

  if (blog.likes.indexOf(req.user._id) > -1){ 
      blog.likes.shift(req.user._id); 
      blog.save(); 
      } else { 
      blog.likes.push(req.user); 
      blog.save(); 
      } 
+0

Die Shift-Array-Methode sucht nicht nach dem Array-Element mit einem Wert gleich einem Parameter und entfernt es. Es entfernt das erste Element aus dem Array. Sie entfernen also das erste Element aus dem Array, das nicht das richtige Element ist, und das nächste Mal, wenn Ihre Benutzer-ID immer noch da ist. – James

Antwort

2

shift Die Funktion wird nur das erste Element aus dem Array entfernen, keine Rücksicht auf die Benutzer-ID in angemeldet bezahlen. Verwenden Sie die Funktion splice, um das gewünschte Ergebnis zu erzielen. , um Ihren Code zu verändern:

let userIndex = blog.likes.indexOf(req.user._id); 
if (userIndex > -1) { 
    blog.likes.splice(userIndex, 1); 
} else { 
    blog.likes.push(req.user); 
} 
blog.save(); 
+0

Vielen Dank! –

+0

Froh zu helfen :) – gaganshera

0

Wie ich in den Kommentaren .shift() erwähnt ist nicht die richtige Methode zu verwenden. Probieren Sie es aus:

var f = blog.likes.indexOf(req.user._id); 
if (f > -1) { 
    blog.likes.splice(f, 1); 
} else { 
    blog.likes.push(req.user); 
} 
blog.save(); 
Verwandte Themen