Array.prototype.forEach()

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 zwrotna callback.

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 ko艅ca tablicy po momencie wywo艂ania forEach nie s膮 przesy艂ane do funkcji 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; elementy usuni臋te zanim zostan膮 odwiedzone nie zostan膮 odwiedzone. Je偶eli element ju偶 odwiedzony zostanie usuni臋ty (nast膮pi skr贸cenie tablicy), element tablicy w kolejno艣ci po obecnie odwiedzanym zostanie pomini臋ty.

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