Array.prototype.filter()
Metoda filter() tworzy nową tablicę z wszystkimi elementami, które przechodzą test określony w postaci funkcji.
function isBigEnough(value) {
return value >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
Składnia
var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
Parametry
callback
- Funkcja sprawdzająca każdy element tablicy. Funkcja powinna zwrócić
true,
aby zatrzymać element lubfalse,
aby odrzucić element. Funkcja przyjmuje trzy argumenty: -
element
- Element tablicy do przetworzenia.
index
- Numer indeksu procesowanego elementu tablicy.
array
- Tablica na której
filter
został wywołany.
thisArg
- Obiekt na który będzie wskazywał
this
, przy wywoływaniu funkcjicallback
.
Opis
Metoda filter
wykonuje dostarczoną funkcję callback
dla każdego elementu tablicy, tworząc nową tablicę z wszystkich tych elementów, dla których funkcja callback
zwróciła wartość true
. Wynikowa tablica jest zwarta; wartości, które nie przechodzą testu funkcji callback,
są zwyczajnie pomijane i nie są przypisywane do indeksów nowej tablicy.
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 thisObject
został dostarczony do metody filter
, będzie on wskazywany przez this
dla każdego wywołania funkcjicallback
. 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 filter
nie modyfikuje tablicy, na której jest wywoływana.
Zakres elementów przetwarzanych przez filter
jest ustawiany przed pierwszym wywołaniem funkcji callback
. Elementy dołączone do tablicy po momencie wywołania filter
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 filter
się o nie zwróci; metoda filter
nie upomina się o elementy usunięte.
Kompatybilność
filter
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 filter
w implementacji ECMA-262, które nie wspierają tego natywnie.
if (!Array.prototype.filter)
{
Array.prototype.filter = function(fun /*, thisp*/)
{
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var res = new Array();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in this)
{
var val = this[i]; // in case fun mutates this
if (fun.call(thisp, val, i, this))
res.push(val);
}
}
return res;
};
}
Przykłady
Przykład: Odfiltrowanie wszystkich małych wartości
Poniższy przykład używa filter
by utworzyć przefiltrowaną tablicę, z której usunięto wszystkie elementy których wartość wynosi mniej niż 10.
function isBigEnough(element, index, array) {
return (element >= 10);
}
filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
Kompatybilność z przeglądarkami
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | 1.5 (1.8) | 9 | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | 1.0 (1.8) | (Yes) | (Yes) | (Yes) |