Jeśli mam następującą tablicę obiektów:
[ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]
Czy istnieje sposób na zapętlenie tablicy w celu sprawdzenia, czy określona wartość nazwy użytkownika już istnieje i czy nic nie robi, ale jeśli nie, to dodanie nowego obiektu do tablicy ze wspomnianą nazwą użytkownika (i nowym identyfikatorem)?
Dzięki!
id
? Czy to możliwe, że elementy zostaną usunięte z tej tablicy, czy też możemy być pewni, że nowy element zawsze będzie miałid
równearr.length + 1
?Odpowiedzi:
Założyłem, że tutaj
id
mają być wyjątkowe.some
to świetna funkcja do sprawdzania istnienia rzeczy w tablicach:źródło
some
nie zwraca wartość logiczną.found
albo będzietrue
albofalse
w zależności od tego, czy warunek w zwrotnego jest spełniony.if (arr.some(function (el) { return el.Id == someId; })) { // do something }
. Nie zapomnij o tym,return
bo nic nie odzyskasz.Sprawdzenie istniejącej nazwy użytkownika jest raczej trywialne:
Ale nie jest takie oczywiste, co zrobić, gdy musisz dodać nowego użytkownika do tej tablicy. Najłatwiejsze wyjście - wystarczy popchnąć nowy element z
id
równymiarray.length + 1
:Zagwarantuje to unikalność identyfikatorów, ale sprawi, że tablica będzie wyglądać nieco dziwnie, jeśli niektóre elementy zostaną zdjęte z jej końca.
źródło
Ten mały fragment działa dla mnie.
źródło
.some
znajduje się tutaj - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ ...Myślę, że to najkrótszy sposób rozwiązania tego problemu. Tutaj użyłem funkcji strzałek ES6 z .filter, aby sprawdzić istnienie nowo dodanej nazwy użytkownika.
Link do Fiddle
źródło
To, co zrobiłem, oprócz @ Sagar-gavhane „s odpowiedź
źródło
...
if(userExists) { const userId = userExists.id return userId; }
...
Zaakceptowaną odpowiedź można również zapisać w następujący sposób używając funkcji strzałek na .some
źródło
Oto łańcuch metod ES6 wykorzystujący
.map()
i.includes()
:źródło
Podoba mi się odpowiedź Andy'ego, ale identyfikator niekoniecznie będzie unikalny, więc oto, co wymyśliłem, aby utworzyć unikalny identyfikator. Można też sprawdzić na jsfiddle . Należy pamiętać, że
arr.length + 1
może to nie zagwarantować unikalnego identyfikatora, jeśli coś zostało wcześniej usunięte.źródło
Możesz prototypować swoją tablicę, aby była bardziej modularna, spróbuj czegoś takiego
Możesz go używać jako:
źródło
Z jakiegoś powodu wypróbowałem powyższe kroki, wydaje się, że nie działają one dla mnie, ale to było moje ostateczne rozwiązanie mojego własnego problemu, może być pomocne dla każdego, kto to przeczytał:
tutaj post.likes to tablica użytkowników, którzy polubili post.
źródło
Spróbuj tego
pierwsza metoda przy użyciu niektórych plików
druga metoda wykorzystująca include, map
źródło
Załóżmy, że mamy tablicę obiektów i chcesz sprawdzić, czy wartość nazwy jest zdefiniowana w ten sposób,
źródło
Natywne funkcje tablicy są czasami 3X - 5X razy wolniejsze niż zwykłe pętle. Dodatkowo natywne funkcje nie będą działać we wszystkich przeglądarkach, więc występują problemy ze zgodnością.
Mój kod:
W ten sposób możesz szybciej osiągnąć wynik.
Uwaga: Nie sprawdzałem, czy przekazany parametr jest pusty, czy nie, jeśli chcesz, możesz go zaznaczyć lub napisać wyrażenie regularne dla określonej walidacji.
źródło
xorWith
w Lodash można to osiągnąćźródło
Sprawdź tutaj:
https://stackoverflow.com/a/53644664/1084987
Możesz stworzyć coś takiego jak warunek if, na przykład
źródło
function number_present_or_not () {
var arr = [ 2,5,9,67,78,8,454,4,6,79,64,688 ] ;
znaleziono var = 6; var found_two; dla (i = 0; iźródło
Oto najlepsza praktyka.
źródło