Wenn ich das folgende Array von Objekten habe:
[ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]
Gibt es eine Möglichkeit, das Array zu durchlaufen, um zu überprüfen, ob ein bestimmter Benutzername bereits vorhanden ist und ob er nichts tut, aber dem Array kein neues Objekt mit diesem Benutzernamen (und dieser neuen ID) hinzuzufügen?
Vielen Dank!
id
? Ist es möglich, dass Elemente aus diesem Array entfernt werden, oder können wir sicher sein, dass das neue Element immerid
gleich istarr.length + 1
?Antworten:
Ich habe angenommen, dass
id
s hier einzigartig sein sollen.some
ist eine großartige Funktion zum Überprüfen der Existenz von Dingen in Arrays:quelle
some
gibt einen Booleschen Wert zurück.found
wird entwedertrue
oderfalse
abhängig davon, ob die Bedingung im Rückruf erfüllt ist.if (arr.some(function (el) { return el.Id == someId; })) { // do something }
. Vergiss das nichtreturn
oder du bekommst nichts zurück.Es ist ziemlich trivial, nach dem vorhandenen Benutzernamen zu suchen:
Es ist jedoch nicht so offensichtlich, was zu tun ist, wenn Sie diesem Array einen neuen Benutzer hinzufügen müssen. Der einfachste Ausweg - einfach ein neues Element mit
id
gleichem Druck drückenarray.length + 1
:Dies garantiert die Eindeutigkeit der IDs, lässt dieses Array jedoch etwas seltsam aussehen, wenn einige Elemente von seinem Ende entfernt werden.
quelle
Diese kleinen Schnipsel funktionieren für mich ..
quelle
.some
finden Sie hier - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Ich denke, dies ist der kürzeste Weg, um dieses Problem anzugehen. Hier habe ich die ES6-Pfeilfunktion mit .filter verwendet, um das Vorhandensein eines neu hinzugefügten Benutzernamens zu überprüfen.
Link zu Fiddle
quelle
Dies habe ich zusätzlich zu der Antwort von @ sagar-gavhane getan
quelle
...
if(userExists) { const userId = userExists.id return userId; }
...
Akzeptierte Antworten können auch folgendermaßen mit der Pfeilfunktion auf .some geschrieben werden
quelle
Ich mag Andys Antwort, aber die ID wird nicht unbedingt eindeutig sein. Deshalb habe ich mir Folgendes ausgedacht, um auch eine eindeutige ID zu erstellen. Kann auch bei jsfiddle überprüft werden. Bitte beachten Sie, dass dies
arr.length + 1
möglicherweise keine eindeutige ID garantiert, wenn zuvor etwas entfernt wurde.quelle
Sie können Ihr Array als Prototyp erstellen, um es modularer zu gestalten. Probieren Sie Folgendes aus
Und Sie können es verwenden als:
quelle
Ich habe die obigen Schritte aus irgendeinem Grund ausprobiert, es scheint nicht für mich zu funktionieren, aber dies war meine endgültige Lösung für mein eigenes Problem, nur vielleicht hilfreich für jemanden, der dies liest:
hier post.likes ist eine Reihe von Benutzern, denen ein Beitrag gefallen hat.
quelle
Versuche dies
erste Methode mit einigen
zweite Methode mit Includes, Map
quelle
Nehmen wir an, wir haben ein Array von Objekten und Sie möchten überprüfen, ob der Wert des Namens wie folgt definiert ist.
quelle
Hier ist eine ES6-Methodenkette mit
.map()
und.includes()
:quelle
Native Funktionen des Arrays sind manchmal 3- bis 5-mal langsamer als normale Schleifen. Außerdem funktionieren native Funktionen nicht in allen Browsern, sodass Kompatibilitätsprobleme auftreten.
Mein Code:
Auf diese Weise können Sie schneller Ergebnisse erzielen.
Hinweis: Ich habe nicht überprüft, ob der übergebene Parameter leer ist oder nicht. Wenn Sie möchten, können Sie ihn überprüfen oder einen regulären Ausdruck für eine bestimmte Validierung schreiben.
quelle
xorWith
in Lodash kann verwendet werden, um dies zu erreichenquelle
Überprüfen Sie es hier:
https://stackoverflow.com/a/53644664/1084987
Sie können so etwas wie wenn Bedingung danach erstellen, wie
quelle
Funktion number_present_or_not () {
var arr = [ 2,5,9,67,78,8,454,4,6,79,64,688 ] ;
var found = 6; var found_two; für (i = 0; iquelle
Die Best Practice ist so.
quelle