Jak mogę usunąć obiekt z tablicy? Życzę, aby usunąć obiekt, który zawiera nazwę Kristian
od someArray
. Na przykład:
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
Chcę osiągnąć:
someArray = [{name:"John", lines:"1,19,26,96"}];
javascript
arrays
Clem
źródło
źródło
Odpowiedzi:
Możesz użyć kilku metod, aby usunąć elementy z tablicy:
Jeśli chcesz usunąć element na miejscu
x
, użyj:Lub
Odpowiedz na komentarz @ chill182 : możesz usunąć jeden lub więcej elementów z tablicy za pomocą
Array.filter
lub wArray.splice
połączeniu zArray.findIndex
(patrz MDN ), np.źródło
findIndex
wynik przed użyciem gosplice
. Jeśli w tablicy nie ma elementów, które pasują, warunekfindIndex
zostanie zwrócony,-1
a umieszczenie tego bezpośrednio w tablicysplice
spowoduje arbitralne usunięcie ostatniego elementu w tablicy.Polecam używanie lodash.js lub sugar.js do typowych zadań takich jak to:
w większości projektów posiadanie zestawu metod pomocniczych dostarczanych przez takie biblioteki jest dość przydatne.
źródło
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
someArray = someArray.filter(function(e) { return e.Name !== "Kristian"; });
Czystym rozwiązaniem byłoby użycie
Array.filter
:Problem polega na tym, że nie działa on w przeglądarce IE <9. Można jednak dołączyć kod z biblioteki JavaScript (np. Underscore.js ), która implementuje to w dowolnej przeglądarce.
źródło
someArray = someArray.filter(function(el) { return el.Name != "Kristian"; });
adresy, które nie, nie?Co powiesz na to?
źródło
$.each()
buforuje długość tablicy przed zapętleniem, więc jeśli usuniesz element,$.each()
będzie przebiegał poza końcem (teraz krótszej) tablicy. (Więc wtedysomeArray[i]
będzieundefined
iundefined.name
rozbije się.)Twoja „tablica”, jak pokazano, jest niepoprawną składnią JavaScript. Nawiasy klamrowe
{}
dotyczą obiektów o parach nazwa-wartość, ale nawiasy kwadratowe[]
dotyczą tablic:W takim przypadku możesz użyć
.splice()
metody, aby usunąć element. Aby usunąć pierwszy element (indeks 0), powiedz:Jeśli nie znasz indeksu, ale chcesz przeszukać tablicę, aby znaleźć element o nazwie „Kristian” do usunięcia, możesz to zrobić:
EDYCJA: Właśnie zauważyłem, że twoje pytanie jest oznaczone jako „jQuery”, więc możesz wypróbować
$.grep()
metodę :źródło
$.grep()
? Nie dodaje się wiele w tym przykładzie, w którym tak, mógłbym umieścić!=
, ale w innych przypadkach możesz już mieć zdefiniowaną funkcję, która wykonuje test odwrotny do tego, co chcesz grepować, więc zamiast definiować dodatkową funkcję można po prostu użyć tego przeciążenia, aby odwrócić wyniki.function isEven(num) { return num%2===0 }
. Możesz użyć,$.grep(someArray, isEven)
aby uzyskać tylko liczby parzyste z tablicy, lub$.grep(someArray, isEven, true)
zrobić coś przeciwnego i uzyskać wartości nieparzyste.ES2015
To usunie Johna !
źródło
Możesz użyć array.filter ().
na przykład
Funkcje strzałek:
źródło
Zrobiłem funkcję dynamiczną, która pobiera obiekty Array, Key i value i zwraca tę samą tablicę po usunięciu pożądanego obiektu:
Pełny przykład: DEMO
źródło
Ta funkcja działa dla mnie:
źródło
Możesz także spróbować zrobić coś takiego:
źródło
źródło
Użyj funkcji łączenia na tablicach. Określ pozycję elementu początkowego i długość podsekwencji, którą chcesz usunąć.
źródło
Głosuj na UndercoreJS dla prostej pracy z tablicami.
Funkcja _.without () pomaga usunąć element:
źródło
Z funkcją strzałki ES 6
źródło
Najprostszym rozwiązaniem byłoby utworzenie mapy, która przechowuje indeksy dla każdego obiektu według nazwy, w następujący sposób:
źródło
Chociaż prawdopodobnie nie jest to odpowiednie w tej sytuacji, dowiedziałem się innego dnia, że możesz również użyć
delete
słowa kluczowego, aby usunąć element z tablicy, jeśli nie musisz zmieniać rozmiaru tablicy, np.źródło
Ta odpowiedź
nie działa dla wielu rekordów spełniających warunek. Jeśli masz dwa takie kolejne rekordy, tylko pierwszy jest usuwany, a drugi pomijany. Musisz użyć:
zamiast .
źródło
Wygląda na to, że wystąpił błąd w składni tablicy, więc zakładając, że masz na myśli tablicę, a nie obiekt, Array.splice jest tutaj twoim przyjacielem:
źródło
Możesz także użyć funkcji mapy .
źródło
Możesz również użyć
some
:źródło
Tego używam.
To jest tak proste, jak powiedzenie
Zastąp dowolną liczbę zamiast trzech. Po oczekiwanym wyniku powinno być:
źródło
Jeśli chcesz usunąć wszystkie wystąpienia danego obiektu (na podstawie pewnych warunków), użyj metody łączenia javascript wewnątrz pętli for.
Ponieważ usunięcie obiektu wpłynęłoby na długość tablicy, należy zmniejszyć licznik o jeden krok, aby kontrola długości pozostała nienaruszona.
Powyższy fragment kodu usuwa wszystkie obiekty w wieku powyżej 20 lat.
źródło
Użyj funkcji splice () javascript.
Może to pomóc: http://www.w3schools.com/jsref/jsref_splice.asp
źródło
splice (i, 1), gdzie i jest przyrostowym indeksem tablicy, usunie obiekt. Pamiętaj jednak, że połączenie zresetuje również długość tablicy, więc uważaj na „niezdefiniowane”. Korzystając z Twojego przykładu, jeśli usuniesz „Kristian”, to w następnym wykonaniu w pętli będę mieć 2, ale someArray będzie miał długość 1, dlatego jeśli spróbujesz usunąć „John”, otrzymasz błąd „niezdefiniowany” . Jednym z rozwiązań tego, choć nie eleganckim, jest posiadanie osobnego licznika do śledzenia indeksu elementu do usunięcia.
źródło
Zwraca tylko obiekty z tablicy, których właściwość
name
nie jest „Kristian”Próbny:
źródło
Te koncepcje za pomocą Kendo Grid
źródło
Jeśli chcesz uzyskać dostęp do obiektu tablicy i usunąć go, możesz po prostu spróbować czegoś takiego.
źródło