Operacje na tablicach w JavaScript - Array.prototype - JS
W tym rozdziale dowiesz się...
W jaki sposób operować na tablicach w języku JavaScript?
- Konstruktor tablicy - constructor
Gdzie jest zapisany konstruktor tablicy?
- Przekształcanie tablicy na tekst - toString
Jak przekształcić tablicę elementów na prosty tekst?
- Przekształcanie tablicy na tekst w rodzimym języku - toLocaleString
Jak przekształcić tablicę elementów na tekst zapisany w rodzimym języku użytkownika?
- Łączenie tablic - concat
W jaki sposób połączyć dwie tablice w jedną?
- Przekształcanie tablicy na tekst z separatorem - join
W jaki sposób przekształcić tablicę na tekst, w którym kolejne elementy będą oddzielone od siebie określonym separatorem?
- Usuwanie ostatniego elementu z tablicy - pop
Jak usunąć ostatni element z tablicy?
- Dodawanie elementu na końcu tablicy - push
Jak dodać nowy element na końcu tablicy?
- Odwracanie kolejności elementów w tablicy - reverse
W jaki sposób odwrócić kolejność elementów w tablicy?
- Usuwanie pierwszego elementu z tablicy - shift
Jak usunąć pierwszy element z tablicy?
- Wycinanie części elementów tablicy - slice
W jaki sposób wyciąć część elementów tablicy?
- Sortowanie elementów tablicy - sort
Jak posortować elementy tablicy w porządku alfabetycznym?
- Wycinanie i zastępowanie elementów tablicy - splice
W jaki sposób wyciąć część elementów tablicy i zastąpić je innymi?
- Dodawanie elementu na początku tablicy - unshift
Jak dodać nowy element na początku tablicy?
- Sprawdzanie obecności elementu w tablicy - indexOf
Jak sprawdzić, czy w tablicy występuje określony elementy?
- Przeszukiwanie tablicy od końca - lastIndexOf
Jak przeszukać tablicę od końca, tak by sprawdzić, czy znajduje się w niej określony element?
- Sprawdzanie warunku dla wszystkich elementów - every
Jak sprawdzić, czy wszystkie elementy tablicy spełniają podany warunek?
- Sprawdzanie warunku dla przynajmniej jednego elementu - some
Jak sprawdzić, czy przynajmniej jeden element tablicy spełnia podany warunek?
- Iterowanie po elementach tablicy - forEach
W jaki sposób przejść kolejno po wszystkich elementach tablicy?
- Przekształcanie elementów tablicy - map
W jaki sposób przekształcić wszystkie elementy tablicy?
- Odfiltrowywanie elementów tablicy - filter
W jaki sposób odfiltrować elementy tablicy, które nie spełniają podanego warunku?
- Redukowanie tablicy do wartości - reduce
Jak zredukować tablicę do pojedynczej prostej wartości?
- Wsteczne redukowanie tablicy - reduceRight
Jak wstecznie zredukować tablicę do pojedynczej prostej wartości?
Konstruktor tablicy - constructor
Gdzie jest zapisany konstruktor tablicy?
Array.prototype.constructor
- Wartość:
Function
- konstruktor obiektu
Zawiera wbudowany konstruktor obiektu Array
.
Przykład Array.prototype.constructor
Array.prototype.constructor === Array; // true new Array().constructor === Array; // true Array.prototype.constructor === Object; // false
Przekształcanie tablicy na tekst - toString
Jak przekształcić tablicę elementów na prosty tekst?
Array.prototype.toString()
- Wartość:
String
- reprezentacja tekstowa tablicy
Zwraca tekst będący listą wszystkich kolejnych elementów tablicy, rozdzielonych przecinkami.
Funkcja toString
jest wywoływana automatycznie zawsze wtedy, gdy oczekiwana jest wartość tekstowa, a przekazano obiekt tablicy.
Przykład Array.prototype.toString
new Array([true, 1, "test"]).toString(); // "true,1,test" [false, 0, "", null, undefined, NaN, Infinity] + ""; // "false,0,,,,NaN,Infinity"
Przekształcanie tablicy na tekst w rodzimym języku - toLocaleString
Jak przekształcić tablicę elementów na tekst zapisany w rodzimym języku użytkownika?
Array.prototype.toLocaleString()
- Wartość:
String
- tekstowa reprezentacja elementów tablicy zgodnie z rodzimym językiem użytkownika- Wyjątki:
TypeError
- element tablicy nie posiada metodytoLocaleString
Działa analogicznie jak Array.prototype.toString, ale przekształca każdy element tablicy na tekst, zgodnie z ustawieniami rodzimego języka użytkownika systemu. Na przykład w języku polskim liczby rzeczywiste zapisujemy z użyciem znaku przecinka, podczas gdy angielskim - z użyciem kropki. Dodatkowo w języku polskim dla poprawy czytelności kolejne tysiące liczby możemy oddzielać od siebie znakiem spacji. Zwykle również inaczej zapisujemy daty z kalendarza.
Przykład Array.prototype.toLocaleString
new Array([1000.2]).toLocaleString(); // np.: "1 000,2" new Array([1000.2]).toString(); // "1000.2" var date = new Date(2000, 0, 31, 20, 30); new Array([date]).toLocaleString(); // np.: "31 styczeń 2000 20:30:00" new Array([date]).toString(); // np.: "Mon Jan 31 2000 20:30:00 GMT+0100" var obj = {}; obj.toLocaleString = undefined; new Array([obj]).toLocaleString(); // TypeError
Łączenie tablic - concat
W jaki sposób połączyć dwie tablice w jedną?
Array.prototype.concat() Array.prototype.concat(item1) Array.prototype.concat(item1, item2...)
- Parametry:
- item1, item2... - lista elementów
- Wartość:
Array
- nowa tablica
Tworzy nową tablicę, będącą połączeniem aktualnych i nowych elementów. Jeżeli argument funkcji sam jest tablicą, każdy z jego elementów jest dodawany po kolei do nowej tablicy. Oryginalna tablica nigdy nie jest zmieniana.
Przykład Array.prototype.concat
var items = [1, 2]; items.concat(); // [1, 2] items.concat(3); // [1, 2, 3] items.concat(3, [4, 5]); // [1, 2, 3, 4, 5] items; // [1, 2]
Przekształcanie tablicy na tekst z separatorem - join
W jaki sposób przekształcić tablicę na tekst, w którym kolejne elementy będą oddzielone od siebie określonym separatorem?
Array.prototype.join() Array.prototype.join(separator)
- Parametry:
String
separator - tekst rozdzielający poszczególne elementy tablicy (domyślnie: ",")- Wartość:
String
- tekstowe połączenie kolejnych elementów tablicy
Przekształca tablicę na tekst podobnie jak funkcja Array.prototype.toString, ale pozwala dodatkowo określić tekst, za pomocą którego zostaną rozdzielone kolejne elementy (dla funkcji Array.prototype.toString
jest to zawsze: ",").
Przykład Array.prototype.join
var items = [1, 2]; items.join("; "); // "1; 2" "[" + items.join(", ") + "]"; // "[1, 2]"
Usuwanie ostatniego elementu z tablicy - pop
Jak usunąć ostatni element z tablicy?
Array.prototype.pop()
- Wartość:
- ostatni element tablicy
Usuwa ostatni element z tablicy i zwraca go. Jeżeli tablica nie zawiera żadnych elementów, funkcja zwraca wartość undefined. Jednak wartości niezdefiniowane mogą być normalnie przechowywane w tablicy, dlatego nie musi to od razu oznaczać, że tablica w każdym takim przypadku jest na pewno pusta.
Przykład Array.prototype.pop
var items = [1, 2]; items.pop(); // 2 items; // [1] items.pop(); // 1 items; // [] items.pop(); // undefined
Dodawanie elementu na końcu tablicy - push
Jak dodać nowy element na końcu tablicy?
Array.prototype.push()
Array.prototype.push(item1)
Array.prototype.push(item1, item2...)
- Parametry:
- item1, item2... - lista nowych elementów
- Wartość:
Number
- nowa długość tablicy
Dodaje nowe elementy na końcu tablicy.
Przykład Array.prototype.push
var items = [1, 2]; items.push(); // 2 items; // [1, 2] items.push(3, [4.1, 4.2]); // 4 items; // [1, 2, 3, [4.1, 4.2]]
Odwracanie kolejności elementów w tablicy - reverse
W jaki sposób odwrócić kolejność elementów w tablicy?
Array.prototype.reverse()
- Wartość:
Array
- odwrócona tablica
Odwraca kolejność elementów tablicy. Nie tworzy nowej instancji obiektu, ale zawsze zmienia bieżący obiekt. Nie działa rekurencyjnie, tzn. jeśli elementem tablicy jest inna tablica, nie zmienia kolejności jej elementów.
Przykład Array.prototype.reverse
var items = [1, 2, [3.1, 3.2]]; items.reverse(); // [[3.1, 3.2], 2, 1] items; // [[3.1, 3.2], 2, 1]
Usuwanie pierwszego elementu z tablicy - shift
Jak usunąć pierwszy element z tablicy?
Array.prototype.shift()
- Wartość:
- pierwszy element tablicy
Usuwa pierwszy element z tablicy i zwraca go. Jeżeli tablica nie zawiera żadnych elementów, funkcja zwraca wartość undefined. Jednak wartości niezdefiniowane mogą być normalnie przechowywane w tablicy, dlatego nie musi to od razu oznaczać, że tablica w każdym takim przypadku jest na pewno pusta.
Przykład Array.prototype.shift
var items = [1, 2]; items.shift(); // 1 items; // [2] items.shift(); // 2 items; // [] items.shift(); // undefined
Wycinanie części elementów tablicy - slice
W jaki sposób wyciąć część elementów tablicy?
Array.prototype.slice() Array.prototype.slice(start) Array.prototype.slice(start, end)
- Parametry:
Number
start - indeks elementu początkowego (domyślnie: 0)Number
end - indeks elementu po końcowym (domyślnie: długość tablicy)- Wartość:
Array
- wycięte elementy
Tworzy nową tablicę, będącą wycinkiem, składający się z kolejnych elementów poczynając od początkowego (na który wskazuje indeks start) aż do końcowego (przed indeksem end).
- Jeżeli do funkcji nie zostaną przekazane żadne argumenty, będzie zwrócona kopia całej tablicy.
- Jeżeli argument end nie zostanie podany, wycinek będzie zawierał wszystkie elementy od start do końca tablicy.
- Jeżeli wartość argumentu będzie mniejsza od zera, odliczanie indeksu rozpocznie się od końca tablicy.
Array.prototype.slice
nie zmienia oryginalnej tablicy, tak jak to robi funkcja Array.prototype.splice.
Przykład Array.prototype.slice
var items = [1, 2, 3, 4]; items.slice(); // [1, 2, 3, 4] items.slice(1); // [2, 3, 4] items.slice(-2); // [3, 4] == items.slice(2); items.slice(1, 3); // [2, 3] items.slice(1, -1); // [2, 3] == items.slice(1, 3); items.slice(-3, -1); // [2, 3] items.slice(0, 0); // [] items.slice(1, 1); // [] items.slice(3, 1); // [] items.slice(-1, -2); // [] == items.slice(3, 2); items; // [1, 2, 3, 4]
Sortowanie elementów tablicy - sort
Jak posortować elementy tablicy w porządku alfabetycznym?
Array.prototype.sort() Array.prototype.sort(comparefn)
- Parametry:
Function
comparefn - funkcja porównująca dwa elementy tablicy (domyślnie elementy są sortowane w porządku alfabetycznym); zwraca:- liczbę mniejszą od zera - gdy pierwszy element jest mniejszy niż drugi
- zero - gdy oba elementy są równe
- liczbę większą od zera - gdy pierwszy element jest większy niż drugi
- Wartość:
Array
- posortowana tablica
Układa elementy tablicy w określonym porządku. Domyślnie odbywa się to alfabetycznie, ale możemy określić swój własny układ, podając funkcję porównującą, która będzie wywoływana zawsze dla dwóch elementów tablicy - za każdym razem innych - tyle razy ile będzie konieczne, aby posortować całą tablicę.
Funkcja Array.prototype.sort
nie tworzy nowej instancji tablicy, ale zawsze zmienia oryginalną, która jest również przez nią zwracana.
Przykład Array.prototype.sort
var items = [3, 2, 1]; items.sort(); // [1, 2, 3] items; // [1, 2, 3] var f = function (x, y) { return y - x; }; items.sort(f); // [3, 2, 1] items; // [3, 2, 1] var persons = [{name: "John"}, {name: "Anna"}, {name: "Tom"}]; f = function (x, y) { if (x.name < y.name) return -1; if (x.name > y.name) return 1; return 0; }; persons.sort(f); // [{name: "Anna"}, {name: "John"}, {name: "Tom"}]
Wycinanie i zastępowanie elementów tablicy - splice
W jaki sposób wyciąć część elementów tablicy i zastąpić je innymi?
Array.prototype.splice() Array.prototype.splice(start, deleteCount) Array.prototype.splice(start, deleteCount, item1) Array.prototype.splice(start, deleteCount, item1, item2...)
- Parametry:
Number
start - indeks elementu początkowegoNumber
deleteCount - ile kolejnych elementów usunąć bądź podmienić- item1, item2... - lista elementów na podmianę
- Wartość:
Array
- wycięte elementy
Tworzy nową tablicę, będącą wycinkiem, składający się z kolejnych elementów poczynając od tego, na który wskazuje indeks start i zawierającym tyle elementów, na ile wskazuje argument deleteCount. Następnie w miejsce wycinka są wstawiane elementy, określone argumentami: item1, item2..., a jeżeli ich nie podamy, wycinek po prostu jest usuwany z oryginalnej tablicy.
- Jeżeli do funkcji nie zostaną przekazane żadne argumenty, będzie zwrócona pusty wycinek, a oryginalna tablica nie ulegnie zmianie.
- Jeżeli wartość argumentu start będzie mniejsza od zera, odliczanie indeksu rozpocznie się od końca tablicy.
Array.prototype.splice
- inaczej niż funkcja Array.prototype.slice - zmienia oryginalną tablicę.
Przykład Array.prototype.splice
var items = [1, 2, 3, 4, 5]; items.splice(); // [] items; // [1, 2, 3, 4, 5] items.slice(0, 0); // [] items; // [1, 2, 3, 4, 5] items.splice(1, 2); // [2, 3] items; // [1, 4, 5] items.splice(1, 0, 2, 3); // [] items; // [1, 2, 3, 4, 5] items.splice(-2, 2); // [4, 5] == items.splice(3, 2); items; // [1, 2, 3] items.splice(1, 1, [2.1, 2.2]); // [2] items; // [1, [2.1, 2.2], 3] items.splice(1, 10, 2, 3, 4, 5); // [[2.1, 2.2], 3] items; // [1, 2, 3, 4, 5]
Dodawanie elementu na początku tablicy - unshift
Jak dodać nowy element na początku tablicy?
Array.prototype.unshift()
Array.prototype.unshift(item1)
Array.prototype.unshift(item1, item2...)
- Parametry:
- item1, item2... - lista nowych elementów
- Wartość:
Number
- nowa długość tablicy
Dodaje nowe elementy na początku tablicy.
Przykład Array.prototype.unshift
var items = [1, 2]; items.unshift(); // 2 items; // [1, 2] items.unshift([-1.2, -1.1], 0); // 4 items; // [[-1.2, -1.1], 0, 1, 2]
Sprawdzanie obecności elementu w tablicy - indexOf
Jak sprawdzić, czy w tablicy występuje określony elementy?
(interpretuje: Internet Explorer 9, Firefox, Opera, Chrome)
Array.prototype.indexOf(searchElement) Array.prototype.indexOf(searchElement, fromIndex)
- Parametry:
- searchElement - poszukiwany element
Number
fromIndex - początkowy indeks poszukiwań (domyślnie: 0)- Wartość:
Number
- indeks pierwszego znalezionego elementu
Przeszukuje tablicę w kierunku jej końca pod kątem występowania w niej podanego elementu. Jeżeli element nie zostanie znaleziony, funkcja zwraca liczbę -1. Możliwe jest również ograniczenie zakresu poszukiwań do elementów o indeksie nie mniejszym niż podany. Jeżeli argument fromIndex jest mniejszy od zera, odliczane jest tyle elementów od końca tablicy i dalej następuje jej przeszukanie w kierunku końca.
Przypominam, że pierwszy element tablicy ma indeks 0, a więc taka wartość zwrócona przez funkcję oznacza, że poszukiwany element został znaleziony (na samym początku tablicy).
Przykład Array.prototype.indexOf
var items = [1, 2, 3, 1]; items.indexOf(1); // 0 items.indexOf(1, 1); // 3 items.indexOf(1, -3); // 3 == items.indexOf(1, 2) items.indexOf(1, -10); // 0 == items.indexOf(1, 0) items.indexOf(1, 10); // -1 == items.indexOf(1, 4) items.indexOf(0); // -1
Przeszukiwanie tablicy od końca - lastIndexOf
Jak przeszukać tablicę od końca, tak by sprawdzić, czy znajduje się w niej określony element?
(interpretuje: Internet Explorer 9, Firefox, Opera, Chrome)
Array.prototype.lastIndexOf(searchElement) Array.prototype.lastIndexOf(searchElement, fromIndex)
- Parametry:
- searchElement - poszukiwany element
Number
fromIndex - początkowy indeks poszukiwań (domyślnie: -1)- Wartość:
Number
- indeks ostatniego znalezionego elementu
Przeszukuje tablicę w kierunku jej początku pod kątem występowania w niej podanego elementu. Jeżeli element nie zostanie znaleziony, funkcja zwraca liczbę -1. Możliwe jest również ograniczenie zakresu poszukiwań do elementów o indeksie nie większym niż podany. Jeżeli argument fromIndex jest mniejszy od zera, odliczane jest tyle elementów od końca tablicy i dalej następuje jej przeszukanie w kierunku początku.
Przypominam, że pierwszy element tablicy ma indeks 0, a więc taka wartość zwrócona przez funkcję oznacza, że poszukiwany element został znaleziony (na samym początku tablicy).
Przykład Array.prototype.lastIndexOf
var items = [1, 2, 3, 1]; items.lastIndexOf(1); // 3 items.lastIndexOf(1, -2); // 0 == items.lastIndexOf(1, 2) items.lastIndexOf(1, 2); // 0 items.lastIndexOf(1, 10); // 3 items.lastIndexOf(1, -10); // -1 items.lastIndexOf(0); // -1
Sprawdzanie warunku dla wszystkich elementów - every
Jak sprawdzić, czy wszystkie elementy tablicy spełniają podany warunek?
(interpretuje: Internet Explorer 9, Firefox, Opera, Chrome)
Array.prototype.every(callbackfn) Array.prototype.every(callbackfn, thisArg)
- Parametry:
Function
callbackfn - funkcja testująca przyjmująca argumenty:- kValue - element tablicy
Number
k - indeks elementu tablicyArray
O - oryginalna tablica
- thisArg - wartość bieżącego obiektu
this
dostępnego w czasie wywołania wewnątrz ciała funkcji (domyślnie: undefined) - Wartość:
Boolean
- czy dla wszystkich elementów tablicy funkcja testująca zwraca wartośćtrue
- Wyjątki:
TypeError
- callbackfn nie jest funkcją
Pozwala sprawdzić, czy wszystkie elementy tablicy spełniają określony warunek. Elementy, które nie zostały jawnie dodane do tablicy, są pomijane.
Jest odpowiednikiem operatora &&
(i - ang. and) przy działaniach na wartościach skalarnych.
Przykład Array.prototype.every
var items = [3, 2, 1]; var f = function (x) { return x > 0; }; items.every(f); // true f = function (x) { return x < 0; }; items.every(f); // false var GreaterThan = function (value) { this.value = value; this.tests = 0; }; GreaterThan.prototype.test = function (value) { ++this.tests; return value > this.value; }; var tester = new GreaterThan(0); items.every(tester.test, tester); // true tester.tests; // 3 tester = new GreaterThan(2); items.every(tester.test, tester); // false tester.tests; // 2 items = [1, 2]; items[3] = 3; items.length; // 4 tester = new GreaterThan(0); items.every(tester.test, tester); // true tester.tests; // 3 items.every(null); // TypeError items.every(undefined); // TypeError items.every({}); // TypeError
Sprawdzanie warunku dla przynajmniej jednego elementu - some
Jak sprawdzić, czy przynajmniej jeden element tablicy spełnia podany warunek?
(interpretuje: Internet Explorer 9, Firefox, Opera, Chrome)
Array.prototype.some(callbackfn) Array.prototype.some(callbackfn, thisArg)
- Parametry:
Function
callbackfn - funkcja testująca przyjmująca argumenty:- kValue - element tablicy
Number
k - indeks elementu tablicyArray
O - oryginalna tablica
- thisArg - wartość bieżącego obiektu
this
dostępnego w czasie wywołania wewnątrz ciała funkcji (domyślnie: undefined) - Wartość:
Boolean
- czy przynajmniej dla jednego elementu tablicy funkcja testująca zwraca wartośćtrue
- Wyjątki:
TypeError
- callbackfn nie jest funkcją
Pozwala sprawdzić, czy przynajmniej jeden element tablicy spełnia określony warunek. Elementy, które nie zostały jawnie dodane do tablicy, są pomijane.
Jest odpowiednikiem operatora ||
(lub - ang. or) przy działaniach na wartościach skalarnych.
Przykład Array.prototype.some
var items = [3, 2, 1]; var f = function (x) { return x > 0; }; items.some(f); // true f = function (x) { return x < 0; }; items.some(f); // false var GreaterThan = function (value) { this.value = value; this.tests = 0; }; GreaterThan.prototype.test = function (value) { ++this.tests; return value > this.value; }; var tester = new GreaterThan(0); items.some(tester.test, tester); // true tester.tests; // 1 tester = new GreaterThan(4); items.some(tester.test, tester); // false tester.tests; // 3 items = [1, 2]; items[3] = 3; items.length; // 4 tester = new GreaterThan(4); items.some(tester.test, tester); // false tester.tests; // 3 items[2] = undefined; items.length; // 4 tester = new GreaterThan(4); items.some(tester.test, tester); // false tester.tests; // 4 items.some(null); // TypeError items.some(undefined); // TypeError items.some({}); // TypeError
Iterowanie po elementach tablicy - forEach
W jaki sposób przejść kolejno po wszystkich elementach tablicy?
(interpretuje: Internet Explorer 9, Firefox, Opera, Chrome)
Array.prototype.forEach(callbackfn) Array.prototype.forEach(callbackfn, thisArg)
- Parametry:
Function
callbackfn - funkcja zwrotna przyjmująca argumenty:- kValue - element tablicy
Number
k - indeks elementu tablicyArray
O - oryginalna tablica
- thisArg - wartość bieżącego obiektu
this
dostępnego w czasie wywołania wewnątrz ciała funkcji (domyślnie: undefined) - Wyjątki:
TypeError
- callbackfn nie jest funkcją
Pozwala przejrzeć kolejno wszystkie elementy tablicy. Elementy, które nie zostały jawnie dodane do tablicy, są pomijane.
Nie ma możliwości przerwania w rozsądny sposób przeglądania tablicy przed jej końcem. W takim przypadku lepiej użyć pętli for
albo ewentualnie funkcji Array.prototype.some bądź Array.prototype.every.
Przykład Array.prototype.forEach
var items = [3, 2, 1]; var sum = 0; var f = function (x) { sum += x; }; items.forEach(f); sum; // 6; var GreaterThan = function (value) { this.value = value; this.tests = 0; this.sum = 0; }; GreaterThan.prototype.test = function (value) { ++this.tests; if (value > this.value) { this.sum += value; return true; } return false; }; var tester = new GreaterThan(0); items.forEach(tester.test, tester); tester.sum; // 6 tester = new GreaterThan(1); items.forEach(tester.test, tester); tester.sum; // 5 // Przerwanie pętli w trakcie: tester = new GreaterThan(2); items.every(tester.test, tester); tester.sum; // 3 tester.tests; // 2 items = [1, 2]; items[3] = 3; items.length; // 4 tester = new GreaterThan(0); items.forEach(tester.test, tester); tester.sum; // 6 tester.tests; // 3 items[2] = undefined; items.length; // 4 tester = new GreaterThan(0); items.forEach(tester.test, tester); tester.sum; // 6 tester.tests; // 4 items.forEach(null); // TypeError items.forEach(undefined); // TypeError items.forEach({}); // TypeError
Przekształcanie elementów tablicy - map
W jaki sposób przekształcić wszystkie elementy tablicy?
(interpretuje: Internet Explorer 9, Firefox, Opera, Chrome)
Array.prototype.map(callbackfn) Array.prototype.map(callbackfn, thisArg)
- Parametry:
Function
callbackfn - funkcja zwracająca nową wartość elementu i przyjmująca argumenty:- kValue - element tablicy
Number
k - indeks elementu tablicyArray
O - oryginalna tablica
- thisArg - wartość bieżącego obiektu
this
dostępnego w czasie wywołania wewnątrz ciała funkcji (domyślnie: undefined) - Wartość:
Array
- nowa tablica- Wyjątki:
TypeError
- callbackfn nie jest funkcją
Pozwala przekształcić jedną tablicę w drugą, wykonując na każdym jej elemencie określoną funkcję. Elementy, które nie zostały jawnie dodane do tablicy, są pomijane. Nie zmienia oryginalnej tablicy, ale zwraca nową.
Przykład Array.prototype.map
var items = [3, 2, 1]; var f = function (x) { return -x; }; items.map(f); // [-3, -2, -1] items; // [3, 2, 1] var GreaterThan = function (value) { this.value = value; this.tests = 0; }; GreaterThan.prototype.test = function (value) { ++this.tests; return value > this.value ? -value : value; }; tester = new GreaterThan(1); items.map(tester.test, tester); // [-3, -2, 1] items = [1, 2]; items[3] = 3; items.length; // 4 tester = new GreaterThan(0); items.map(tester.test, tester); // [-1, -2, undefined, -3] tester.tests; // 3 items[2] = undefined; items.length; // 4 tester = new GreaterThan(0); items.map(tester.test, tester); // [-1, -2, undefined, -3] tester.tests; // 4 items.map(null); // TypeError items.map(undefined); // TypeError items.map({}); // TypeError
Odfiltrowywanie elementów tablicy - filter
W jaki sposób odfiltrować elementy tablicy, które nie spełniają podanego warunku?
(interpretuje: Internet Explorer 9, Firefox, Opera, Chrome)
Array.prototype.filter(callbackfn) Array.prototype.filter(callbackfn, thisArg)
- Parametry:
Function
callbackfn - funkcja testująca przyjmująca argumenty:- kValue - element tablicy
Number
k - indeks elementu tablicyArray
O - oryginalna tablica
- thisArg - wartość bieżącego obiektu
this
dostępnego w czasie wywołania wewnątrz ciała funkcji (domyślnie: undefined) - Wartość:
Array
- nowa tablica- Wyjątki:
TypeError
- callbackfn nie jest funkcją
Pozwala pobrać z tablicy elementy, które spełniają określony warunek. Elementy, które nie zostały jawnie dodane do tablicy, są pomijane. Nie zmienia oryginalnej tablicy, ale zwraca nową.
Przykład Array.prototype.filter
var items = [3, 2, 1]; var f = function (x) { return x > 1; }; items.filter(f); // [3, 2] items; // [3, 2, 1] var GreaterThan = function (value) { this.value = value; this.tests = 0; }; GreaterThan.prototype.test = function (value) { ++this.tests; return value > this.value; }; tester = new GreaterThan(2); items.filter(tester.test, tester); // [3] tester.tests; // 3 items = [1, 2]; items[3] = 3; items.length; // 4 tester = new GreaterThan(0); items.filter(tester.test, tester); // [1, 2, 3] tester.tests; // 3 items[2] = undefined; items.length; // 4 tester = new GreaterThan(0); items.filter(tester.test, tester); // [1, 2, 3] tester.tests; // 4 items.filter(null); // TypeError items.filter(undefined); // TypeError items.filter({}); // TypeError
Redukowanie tablicy do wartości - reduce
Jak zredukować tablicę do pojedynczej prostej wartości?
(interpretuje: Internet Explorer 9, Firefox, Opera 10.50, Chrome)
Array.prototype.reduce(callbackfn) Array.prototype.reduce(callbackfn, initialValue)
- Parametry:
Function
callbackfn - funkcja zwracająca zredukowaną wartość i przyjmująca argumenty:- accumulator - dotychczasowa zredukowana wartość
- kValue - element tablicy
Number
k - indeks elementu tablicyArray
O - oryginalna tablica
- initialValue - wartość początkowa (domyślnie: element o najniższym indeksie jawnie dodanym do tablicy)
- Wartość:
- zredukowana wartość tablicy
- Wyjątki:
TypeError
- callbackfn nie jest funkcją albo nie podano initialValue podczas gdy do tablicy nie dodano jawnie żadnych elementów
Przechodzi kolejno przez wszystkie elementy tablicy, redukując ją do pojedynczej wartości. Elementy, które nie zostały jawnie dodane do tablicy, są pomijane.
Pozwala obliczyć np. silnię lub sumę wszystkich elementów tablicy.
Przykład Array.prototype.reduce
var items = [3, 2, 1]; var f = function (a, x) { a += x; return a; }; items.reduce(f, 0); // 6 var GreaterThan = function (value) { this.value = value; this.tests = 0; }; GreaterThan.prototype.test = function (sum, value) { ++this.tests; if (value > this.value) sum += value; return sum; }; tester = new GreaterThan(1); f = tester.test.bind(tester); items.reduce(f); // 5 tester.tests; // 2 tester = new GreaterThan(1); f = tester.test.bind(tester); items.reduce(f, 0); // 5 tester.tests; // 3 items = [1, 2]; items[3] = 3; items.length; // 4 tester = new GreaterThan(0); f = tester.test.bind(tester); items.reduce(f, 0); // 6 tester.tests; // 3 items[2] = undefined; items.length; // 4 tester = new GreaterThan(0); f = tester.test.bind(tester); items.reduce(f, 0); // 6 tester.tests; // 4 items.reduce(null); // TypeError items.reduce(undefined); // TypeError items.reduce({}); // TypeError [].reduce(f); // TypeError new Array(3).reduce(f); // TypeError
Wsteczne redukowanie tablicy - reduceRight
Jak wstecznie zredukować tablicę do pojedynczej prostej wartości?
(interpretuje: Internet Explorer 9, Firefox, Opera 10.50, Chrome)
Array.prototype.reduceRight(callbackfn) Array.prototype.reduceRight(callbackfn, initialValue)
Działa analogicznie jak funkcja Array.prototype.reduce, ale przechodzi elementy tablicy w kierunku jej początku, a nie końca.