Próbowałem kilku podejść, jak znaleźć obiekt w tablicy, gdzie ID = var, a jeśli zostanie znaleziony, usuń obiekt z tablicy i zwróć nową tablicę obiektów.
Dane:
[
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
Jestem w stanie przeszukać tablicę przy użyciu jQuery $ grep;
var id = 88;
var result = $.grep(data, function(e){
return e.id == id;
});
Ale jak mogę usunąć cały obiekt, gdy id == 88 i zwrócić takie dane:
Dane:
[
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
javascript
jquery
arrays
object
Tomek
źródło
źródło
slice
funkcji i małejfor
pętli?Odpowiedzi:
Po prostu przefiltruj według przeciwnego predykatu:
źródło
slice
również niczego nie usuwa. Nie jestem pewien, do czego zmierzasz. Jeśli sam masz konkretny problem, możesz zadać nowe pytanie .data.filter(e => !ids.includes(e.id))
tutaj jest rozwiązanie, jeśli nie używasz jquery:
źródło
findIndex()
a następniesplice(index, 1)
na tablicy nadrzędnej?arr = arr.filter( obj => obj.id !== id);
Możesz to uprościć i naprawdę nie ma potrzeby używania tutaj jquery.
Po prostu przejrzyj listę, znajdź pasujący identyfikator, połącz, a następnie przerwij, aby wyjść z pętli
źródło
i=data.length; i > 0; i--
wykonaj pętlę w odwrotnej kolejności z i nie używajbreak
.i = data.length
zepsuje jakiekolwiekdata[i]
, powinno być coś takiegoi=data.length -1 ; i > -1; i--
W ES6 / 2015 dostępna jest nowa metoda za pomocą funkcji findIndex i operatora rozproszenia tablicy:
Możesz przekształcić go w funkcję do późniejszego ponownego wykorzystania w następujący sposób:
W ten sposób możesz usunąć elementy za pomocą różnych kluczy przy użyciu jednej metody (i jeśli nie ma obiektu spełniającego kryteria, zwrócona zostanie oryginalna tablica):
Lub możesz umieścić go na swoim Array.prototype:
I użyj tego w ten sposób:
źródło
Zakładając, że identyfikatory są unikalne i wystarczy usunąć tylko jeden element
splice
:źródło
each(data,function(idx,ele)
. PóźniejJeśli używasz jQuery, użyj jQuery.grep w następujący sposób:
Korzystanie z ES5 Array.prototype.filter :
źródło
jQuery
mapy jako filtru.Może szukasz
$.grep()
funkcji:źródło
sift
to potężny filtr kolekcji dla operacji takich jak ta i znacznie bardziej zaawansowanych. Działa po stronie klienta w przeglądarce lub po stronie serwera w node.js.Obsługuje filtry jak
$in
,$nin
,$exists
,$gte
,$gt
,$lte
,$lt
,$eq
,$ne
,$mod
,$all
,$and
,$or
,$nor
,$not
,$size
,$type
, i$regex
, i stara się być zgodny z API filtrowania kolekcji MongoDB.źródło
To powinno załatwić sprawę , jsfiddle
źródło
Upewnij się, że wymuszasz identyfikator obiektu na liczbę całkowitą, jeśli testujesz pod kątem ścisłej równości:
Próbny
źródło
Jeśli używasz podkreślenia js, łatwo jest usunąć obiekt na podstawie klucza. http://underscorejs.org . Przykład:
źródło