Powiedz, że mam ten kod
var arr = [{id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 3, name: 'c'}];
i chcę usunąć element o id = 3 z tablicy. Czy istnieje sposób na zrobienie tego bez łączenia? Czy możesz użyć podkreślenia lub czegoś takiego?
Dzięki!
javascript
underscore.js
climboid
źródło
źródło
Odpowiedzi:
Po prostu używając zwykłego JavaScript, odpowiedź została już udzielona: usuń obiekty z tablicy według właściwości obiektu .
Używając underscore.js, możesz łączyć
.findWhere
z.without
:Chociaż, ponieważ i tak tworzysz nową tablicę w tym przypadku, możesz po prostu użyć funkcji
_.filter
natywnej lubArray.prototype.filter
(tak jak pokazano w drugim pytaniu). Wtedy wykonałbyś iterację po tablicy tylko raz, zamiast potencjalnie dwukrotnie, jak tutaj.Jeśli chcesz zmodyfikować tablicę w miejscu , musisz użyć
.splice
. Jest to również pokazane w drugim pytaniu, a undescore nie wydaje się zapewniać żadnej użytecznej funkcji do tego.źródło
_.reject
wygląda na lepszy wybór tutaj.arr.pop()
...Możesz użyć podkreślenia
.filter
Można również zapisać jako:
Sprawdź Fiddle
Możesz także użyć
.reject
źródło
_()
utworzy opakowanie wokół kolekcji, które pozwoli Ci wywołać metody podkreślenia.Użyj podkreślenia
_.reject()
:źródło
arr = _.reject(arr, d => d.id === 3 );
Underscore ma metodę _without () idealną do usuwania elementu z tablicy, zwłaszcza jeśli masz obiekt do usunięcia.
Działa również z bardziej złożonymi obiektami.
Jeśli nie masz elementu do usunięcia, tylko jego właściwość, możesz użyć
_.findWhere
a następnie_.without
.źródło
{ Name: "Sam", Age: 19 }
do bez zmiennej sam, a nie do zmiennej sam, to już nie działa. FiddleZachowaj ostrożność, jeśli filtrujesz ciągi znaków i szukasz filtrów niewrażliwych na wielkość liter. _.without () rozróżnia wielkość liter. Możesz także użyć _.reject (), jak pokazano poniżej.
źródło
Inne odpowiedzi tworzą nową kopię tablicy, jeśli chcesz zmodyfikować tablicę w miejscu, możesz użyć:
Ale zakłada się, że element zawsze będzie znajdował się wewnątrz tablicy (ponieważ jeśli nie zostanie znaleziony, nadal usunie ostatni element). Dla bezpieczeństwa możesz użyć:
źródło
lub w inny wygodny sposób:
moje 2 centy
źródło
object
i zwraca plikobject
. w związku z tym nie nadaje się do pracy z miejscami, wArrays
których możemy spodziewać sięarray
zwrotu po usunięciu elementu._.without([1, 2, 1, 0, 3, 1, 4], 0, 1); => [2, 3, 4]
Zastosowanie mogą korzystać Plain obsługa JavaScript dydaktycznego
Array#filter
metodę tak:Lub użyj
Array#reduce
iArray#concat
metod takich jak ta:UWAGA:
źródło
Kiedyś próbowałem tej metody
Mogą być też lepsze metody, takie jak powyższe rozwiązania dostarczane przez użytkowników
źródło
Używając underscore.js
Wynik będzie:
[{id:1name:'a'},{id:2,name:'c'}]
źródło
Możesz użyć odrzuconej metody Underscore, poniżej zwróci nową tablicę, która nie będzie miała tablicy z konkretnym dopasowaniem
źródło