Mam dwie identyczne tablice: itemsOutput
& itemsOutput2
Usuń obiekty z tablicy - dwa różne podejścia, dwa różne wyniki podczas konsultacji długość każdej tablicy
chcę usunąć te obiekty w tablicach z attributes.type = "DIMENSION"
. Znalazłem dwa różne sposoby robi tak:
Metoda 1
jQuery.each(itemsOutput, function(i, val) {
if(val.attributes.type == "DIMENSION") // delete index
{
delete itemsOutput[i];
}
});
console.log(itemsOutput.length);
Metoda 2
metrics = itemsOutput2.filter(function (el) {
return el.attributes.type === "METRIC";
});
console.log(metrics.length);
Chociaż oba nowe tablice wydają się mieć taką samą liczbę obiektów (i w obu przypadkach zniknęły wszystkie obiekty o atrybut.type = "DIMENSION"), konsola pokazuje dwie całkowicie różne wartości długości każdej z tablic.
Metoda 1 usuwa przedmioty, a długość jest taka sama jak w oryginalnej matrycy (chociaż odkrywania tablicy w konsoli I zauważyć, że obiekty zachować oryginalne indeksy)
Metoda 2 nie tylko usuwa przedmioty, ale także sukcesywnie gromadzi indeksy. Dla mnie kod wydaje się bardziej przejrzysty, więc pozostanę przy tej metodzie.
Moje pytanie brzmi, dlaczego tak się dzieje i czy mogą wystąpić problemy, jeśli na przykład korzystam z wyników metody 1 w pętli.
Nie wiem, jak działa jQuery.each, ale ... Jeśli pętle nad obiektami zaczyna się od początku, może spowodować błędy, jeśli zaczniesz używać splice w środkowej pętli tablicy. – Marie
* tablica będzie zawierać niezdefiniowaną wartość w tym indeksie *? Nie całkiem. – DavidDomain
Przynajmniej w firefoxie wygląda na to, że to prawda @DavidDormain. Otworzyłem konsolę i uruchomiłem następujące polecenia ... 'var test = [1, 2, 3, 4];', 'delete test [2];' wydruki testowe 'Array [1, 2, <1 empty slot> , 4] ', następnie' test [2] === undefined 'prints' true' – Marie