Próbuję przejść przez tablicę. Mam następujący kod:
var currnt_image_list= '21,32,234,223';
var substr = currnt_image_list.split(','); // array here
Próbuję usunąć wszystkie dane z tablicy. Czy ktoś może poprowadzić mnie właściwą ścieżką?
(Aktualizacja: Moja inna odpowiedź tutaj znacznie dokładniej określa opcje inne niż jQuery. Trzecia opcja poniżej jQuery.each
nie jest jednak dostępna.)
Cztery opcje:
var i;
for (i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
lub w ES2015 +:
for (let i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
Zalety : Prosto, bez zależności od jQuery, łatwy do zrozumienia, bez problemów z zachowaniem znaczenia this
wewnątrz ciała pętli, bez zbędnego narzutu wywołań funkcji (np. Teoretycznie szybciej, choć w rzeczywistości trzeba by było mieć tak wiele elementów, że są szanse, że będziesz mieć inne problemy; szczegóły ).
forEach
:Począwszy od ECMAScript5, tablice mają na sobie forEach
funkcję, która ułatwia zapętlenie tablicy:
substr.forEach(function(item) {
// do something with `item`
});
(Uwaga: Istnieje wiele innych funkcji, nie tylko forEach
; szczegółowe informacje znajdują się w powyższej odpowiedzi ).
Zalety : Deklaratywny, można użyć wstępnie zbudowanej funkcji dla iteratora, jeśli masz jedną poręczną, jeśli ciało pętli jest złożone, określenie zakresu wywołania funkcji jest czasem przydatne, nie ma potrzeby i
zmiennej w swoim zawierającym zakresie.
Wady : Jeśli używasz this
w kodzie zawierającym i chcesz użyć this
w swoim forEach
zwrotnego, trzeba albo) stick to w zmiennej, dzięki czemu można go używać wewnątrz funkcji, B) Przeciągnij go jako drugi argument na forEach
tak forEach
ustawia go jak this
podczas oddzwaniania lub C) Użyj funkcji strzałki ES2015 + , która zamyka się this
. Jeśli nie zrobisz żadnej z tych rzeczy, w wywołaniu zwrotnym this
będzie undefined
(w trybie ścisłym) lub obiekt globalny ( window
) w trybie swobodnym. Kiedyś istniała druga wada, która forEach
nie była powszechnie obsługiwana, ale tutaj w 2018 r. Jedyną przeglądarką, w której się natkniesz, której nie ma, forEach
jest IE8 (i nie może być poprawnie tam też polifill).
for-of
:for (const s of substr) { // Or `let` if you want to modify it in the loop body
// do something with `s`
}
Zobacz odpowiedź na górze tej odpowiedzi, aby dowiedzieć się, jak to działa.
Zalety : Prosty, bezpośredni, oferuje zmienną o ograniczonym zakresie (lub stałą, jak wyżej) do wprowadzania z tablicy.
Wady : Nieobsługiwane w żadnej wersji IE.
jQuery.each(substr, function(index, item) {
// do something with `item` (or `this` is also `item` if you like)
});
Zalety : Wszystkie te same zalety co forEach
plus, że wiesz, że istnieje, ponieważ używasz jQuery.
Wady : Jeśli używasz this
w kodzie zawierającym, musisz umieścić go w zmiennej, abyś mógł używać go w funkcji, ponieważ this
oznacza to coś innego w funkcji.
Możesz jednak tego uniknąć this
, używając $.proxy
:
jQuery.each(substr, $.proxy(function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}, this));
... lub Function#bind
:
jQuery.each(substr, function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}.bind(this));
... lub w ES2015 („ES6”), funkcja strzałki:
jQuery.each(substr, (index, item) => {
// do something with `item` (`this` is the same as it was outside)
});
Nie używaj for..in
do tego (lub jeśli tak, rób to z odpowiednimi zabezpieczeniami). Zobaczysz ludzi, którzy to mówią (w rzeczywistości na chwilę była tu odpowiedź, że to mówi), ale for..in
nie robią tego, co wielu uważa, że robi (robi coś jeszcze bardziej przydatnego!). W szczególności, for..in
pętle przechodzą przez wymienne nazwy właściwości obiektu (nie indeksy tablicy). Ponieważ tablice są obiektami, a ich jedynymi domyślnymi właściwościami, które można wyliczyć, są indeksy, wydaje się, że przeważnie działa to trochę bezładnie. Ale nie jest to bezpieczne założenie, że możesz po prostu tego użyć. Oto eksploracja: http://jsbin.com/exohi/3
Powinienem złagodzić powyższe „nie”. Jeśli masz do czynienia z rzadkimi tablicami (np. Tablica ma w sumie 15 elementów, ale ich indeksy są z jakiegoś powodu rozrzucone w zakresie od 0 do 150 000, a więc length
wynosi 150,001), i jeśli stosujesz odpowiednie zabezpieczenia, takie jak hasOwnProperty
i sprawdzanie nazwa właściwości jest naprawdę numeryczna (patrz link powyżej), for..in
może być całkowicie rozsądnym sposobem na uniknięcie wielu niepotrzebnych pętli, ponieważ wyliczane będą tylko wypełnione indeksy.
.each()
lubfor...in
do zapętlania tablicy jest ogólnie złym pomysłem. To tak, jakby wiek był wolniejszy niż używaniefor
lubwhile
. Używaniefor loop
to nawet świetny pomysł, aby buforowaćlength
właściwość przed zapętleniem.for (var i = 0, len = substr.length; i < len; ...
Function#bind
. :-) Dobra uwaga, dodano.i++
i++i
jest wynikiem tego wyrażenia, które nigdy nie jest używane w powyższym przykładzie.for
Pętla działa tak: 1. Inicjowanie, 2. Test (rozwiązana, jeśli false), 3. Organ, 4. Update 5. Przejdź do kroku 2. Wynikiem wyrażenia aktualizacji nie jest używany do niczego.jQuery.each ()
jQuery.each ()
iteracja tablicy
iteracja obiektu
przykład :
Pętle javascript dla tablicy
dla pętli
przykład
dla w
z dnia
dla każdego
Zasoby
Pętle i iteratory MDN
źródło
Nie ma tu potrzeby jquery,
for
działa tylko pętla:źródło
Opcja 1: Tradycyjna
for
pętlaPodstawy
Tradycyjna
for
pętla składa się z trzech elementów:Te trzy elementy są oddzielone od siebie
;
symbolem. Treść każdego z tych trzech składników jest opcjonalna, co oznacza, że następujące jest najbardziej minimalnafor
możliwa pętla:Oczywiście, musisz dołączyć
if(condition === true) { break; }
lubif(condition === true) { return; }
gdzieś wewnątrz tejfor
pętli, aby przestała działać.Zwykle jednak inicjacja służy do deklarowania indeksu, warunek służy do porównania tego indeksu z wartością minimalną lub maksymalną, a przemyślenie służy do zwiększenia indeksu:
Używanie tradycyjnej
for
pętli do przechodzenia przez tablicęTradycyjny sposób przechodzenia przez tablicę jest następujący:
Lub, jeśli wolisz zapętlać wstecz, wykonaj następujące czynności:
Istnieje jednak wiele możliwych wariantów, np. ten :
... albo ten ...
... albo ten :
To, co działa najlepiej, zależy w dużej mierze zarówno od osobistego gustu, jak i konkretnego przypadku zastosowania, który wdrażasz.
Uwaga :Każda z tych odmian jest obsługiwana przez wszystkie przeglądarki, w tym bardzo stare!
Opcja 2:
while
pętlaJedną alternatywą dla
Uwaga :for
pętli jestwhile
pętla. Aby przejść przez tablicę, możesz to zrobić:Podobnie jak tradycyjne
for
pętle,while
pętle są obsługiwane nawet przez najstarszą przeglądarkę.Ponadto pętla while może być przepisana jako pętla
for
. Na przykładwhile
powyższa pętla zachowuje się dokładnie tak samo jak tafor
pętla:Opcja 3:
for...in
ifor...of
W JavaScript możesz także to zrobić:
Należy tego jednak używać ostrożnie, ponieważ nie zachowuje się tak samo jak tradycyjna
for
pętla we wszystkich przypadkach i należy wziąć pod uwagę potencjalne skutki uboczne. Zobacz: Dlaczego używanie „dla ... w” z iteracją tablicy jest złym pomysłem? po więcej szczegółów.Alternatywą dla
Uwaga :for...in
jest teraz takżefor...of
. Poniższy przykład pokazuje różnicę międzyfor...of
pętlą afor...in
pętlą:Należy również wziąć pod uwagę, że żadna wersja programu Internet Explorer nie obsługuje
for...of
( Edge 12+ ) ifor...in
wymaga co najmniej IE10.Opcja 4:
Array.prototype.forEach()
Alternatywą dla opcji
Uwaga :For
-loops jestArray.prototype.forEach()
użycie następującej składni:Array.prototype.forEach()
jest obsługiwany przez wszystkie nowoczesne przeglądarki, a także IE9 +.Opcja 5:
jQuery.each()
Oprócz czterech innych wymienionych opcji, jQuery również miało swoją własną
foreach
odmianę.Wykorzystuje następującą składnię:
źródło
Skorzystaj z
each()
funkcji jQuery.Oto przykład:
źródło
Użyj jQuery
each()
. Istnieją inne sposoby, ale każdy jest przeznaczony do tego celu.I nie wstawiaj przecinka po ostatnim numerze.
źródło
Możesz użyć
for()
pętli:źródło
Składnia ES6 z funkcją strzałki i interpolacją:
źródło
Spróbuj tego:
źródło
Alternatywne sposoby iteracji poprzez tablicę / ciąg znaków z efektami ubocznymi
źródło