Zastanawiałem się, czy istnieje sposób zrobienia czegoś takiego jak foreach
pętla PHP w JavaScript. Funkcjonalność, której szukam, to coś w rodzaju tego fragmentu kodu PHP:
foreach($data as $key => $value) { }
Patrzyłem na for..in
pętlę JS , ale wydaje się, że nie ma sposobu, aby określić as
. Jeśli zrobię to za pomocą „normal” for loop ( for(var i = 0; i < data.length; i++
), czy istnieje sposób na pobranie par klucz => wartości?
źródło
Object.entries
połączenia. Nie przeprowadziłem jednak żadnych testów.hasOwnProperty
służy do sprawdzania, czytarget
naprawdę ma tę właściwość, zamiast dziedziczenia jej po prototypie. Nieco prostsze byłoby:To sprawdza tylko, że
k
nie jest to metoda (jakbytarget
toarray
dostaniesz wiele metod powiadamiani, npindexOf
,push
,pop
itp.)źródło
Object.keys
.Object.keys(target).forEach(function (key) { target[key]; });
.target
zostanie utworzony za pomocąObject.create(null)
, kod powinien zostać zmienionytarget.hasOwnProperty(k)
->Object.prototype.hasOwnProperty.call(target,k)
k
,target
iproperty
? Dla mnie nie-javascripter ten obszar nieokreślony :)Nikt o tym nie wspominał,
Object.keys
więc wspomnę o tym.źródło
for of
tc39wiki.calculist.org/es6/for-ofbo ... w zadziała dla ciebie.
W nowoczesnym JavaScript możesz również to zrobić:
źródło
Składnia php to tylko cukier.
źródło
Zakładam, że wiesz, że
i
to jest klucz i że możesz uzyskać wartość za pośrednictwemdata[i]
(i po prostu chcę do tego skrótu).ECMAScript5 wprowadził
forEach
[MDN] dla tablic (wygląda na to, że masz tablicę):Dokumentacja MDN zawiera podkładkę dla przeglądarek, które jej nie obsługują.
Oczywiście nie działa to w przypadku obiektów, ale możesz utworzyć dla nich podobną funkcję:
Ponieważ otagowałeś pytanie jquery, jQuery zapewnia
$.each
[dokumentację], która zapętla zarówno struktury tablicowe, jak i obiektowe.źródło
forEach
, a nie obiektforEach
.for each
składnię.for each (let val in myObj) console.log(val);
.Możesz do tego użyć
for..in
.źródło
W javascript każdy obiekt ma kilka wbudowanych par klucz-wartość, które mają meta-informacje. Kiedy przechodzisz przez wszystkie pary klucz-wartość dla obiektu, również je przechodzisz. Zastosowanie hasOwnProperty () odfiltrowuje je.
źródło
ES6 dostarczy Map.prototype.forEach (callback), którego można użyć w ten sposób
źródło
myMap
?źródło
[['a', 1],['b',2],['c',3]]
.forEach
Dekonstruuje każdy z kluczowych tablic / wartość i ustawia dwie zmiennekey
ivalue
, aby być stosowane jako chcesz w funkcji - tu wydatekconsole.log
.W tym celu możesz użyć pętli „for in”:
źródło
Poniżej znajduje się przykład, który jest tak blisko, jak to możliwe.
Jeśli używasz jQuery, zobacz: http://api.jquery.com/jQuery.each/
źródło
Jeśli korzystasz z Lodash , możesz użyć
_.forEach
źródło
W ciągu ostatnich kilku lat, odkąd powstało to pytanie, Javascript dodał kilka nowych funkcji. Jednym z nich jest metoda Object.Entries .
Skopiowany bezpośrednio z MDN jest fragment kodu śledzenia
źródło
tak, możesz mieć tablice asocjacyjne również w javascript:
źródło
źródło