Podsumowanie
Wykonuje dostarczoną funkcję jeden raz na każdy element tablicy.
Składnia
arr.forEach(callback[, thisArg])
Parametry
callback
- Funkcja wykonywana dla każdego elementu.
thisArg
- Obiekt na który będzie wskazywał
this
, gdy wykonana zostanie funkcja zwrotnacallback
.
Opis
Metoda forEach
wykonuje dostarczoną funkcje callback
raz dla każdego elementu tablicy. Funkcja callback
wywoływana jest jedynie dla indeksów tablicy, którym została przypisana wartość; nie jest wywoływana dla indeksów, które zostały usunięte i tych, którym nigdy nie została przypisana żadna wartość.
Funkcja callback
jest wywoływana z trzema argumentami: wartością elementu, jego indeksem i obiektem tablicy, w którym się ten element zawiera.
Jeśli parametr thisArg
został dostarczony do metody forEach
, będzie on wskazywany przez this
dla każdego wywołania funkcji callback
. W przypadku, gdy nie został on przekazany lub jego wartość jest równa null
, this
będzie się odnosić do obiektu globalnego połączonego z funkcją callback
.
Metoda forEach
nie modyfikuje tablicy na której jest wywołana.
Zakres elementów przetwarzanych przez forEach
jest ustawiany przed pierwszym wywołaniem funkcji callback
. Elementy dołączone do tablicy po momencie wywołania forEach
są testowane przez callback
. Jeśli istniejące elementy tablicy są zmieniane lub usuwane, to wartość przesyłana do funkcji callback
odpowiada wartości w momencie, w którym forEach
się o nie zwróci; metoda forEach
nie upomina się o elementy usunięte.
Kompatybilność
forEach
jest rozszerzeniem JavaScript dla standardu ECMA-262, więc może nie być obecny w innych implementacjach tego standardu. Można to obejść, dopisując poniższy kod na początku skryptu, zezwalający na użycie forEach
w implementacji ECMA-262, które nie wspierają tego natywnie.
if (!Array.prototype.forEach) { Array.prototype.forEach = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new TypeError(); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this) fun.call(thisp, this[i], i, this); } }; }
Przykłady
Przykład: Drukowanie zawartości tablicy
Następujący kod drukuje linie dla każdego elementu w tablicy (i przyjmuje obecność funkcji print
do wywołania!):
function printElt(element, index, array) { print("[" + index + "] jest " + element); } [2, 5, 9].forEach(printElt); // Wydrukuje: // [0] jest 2 // [1] jest 5 // [2] jest 9
Przykład: Drukowanie zawartości tablicy z metodą obiektu
Następujący kod tworzy prosty obiekt wypisujący i następnie stosuje metodę writeln
do wypisania jednej linii na element w tablicy (przyjmuje obecność funkcji print
do wywołania!):
var writer = { sb: [], write: function (s) { this.sb.push(s); }, writeln: function (s) { this.write(s + "\n"); }, toString: function () { return this.sb.join(""); } }; [2, 5, 9].forEach(writer.writeln, writer); print(writer.toString()); // Wydrukuje: // 2 // 5 // 9