[ Leksykon ] [ JavaScript ] [ Tablice ] [ Metody ] [ Właściwości ] [ Array() ]
Array.prototype.reduce()
[_] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Przykłady:
const tablicaX = [0, 1, 2, 3, 4];
const zadanie = (a, b) => Math.max(a, b);
console.log(tablicaX.reduce(zadanie, 10)); // 10
console.log([1, 2, 8, 9].reduce(zadanie)); // 9
console.log([3].reduce(zadanie, 2)); // 3
console.log([3].reduce(zadanie)); // 3
console.log([].reduce(zadanie, 1)); // 1
console.log([].reduce(zadanie)); // TypeError
const tablica = [0, 1, 2, 3, 4, 10];
const zacznij = 0;
const wynik = tablica.reduce(
(accumulator, currentValue) => accumulator + currentValue,
zacznij,
);
console.log(wynik);
// 20
const tablica = [10, 20, 30, 40, 50];
function zadanie(argumentament1, argumentament2, argumentament3, argumentament4) {
const wynik = argumentament1 + argumentament2;
console.log(
`argumentament1: ${argumentament1},
argumentament2: ${argumentament2},
argumentament3: ${argumentament3},
argumentament4: ${argumentament4},
wynik: ${wynik}`,
);
return wynik;
}
tablica.reduce(zadanie);
// "argumentament1: 10,
// argumentament2: 20,
// argumentament3: 1,
// argumentament4: 10,20,30,40,50,
// wynik: 30"
// "argumentament1: 30,
// argumentament2: 30,
// argumentament3: 2,
// argumentament4: 10,20,30,40,50,
// wynik: 60"
// "argumentament1: 60,
// argumentament2: 40,
// argumentament3: 3,
// argumentament4: 10,20,30,40,50,
// wynik: 100"
// "argumentament1: 100,
// argumentament2: 50,
// argumentament3: 4,
// argumentament4: 10,20,30,40,50,
// wynik: 150"
const tablica = [10, 20, 30, 40, 50];
function zadanie(argumentament1, argumentament2, argumentament3, argumentament4) {
const wynik = argumentament1 + argumentament2;
console.log(
`argumentament1: ${argumentament1},
argumentament2: ${argumentament2},
argumentament3: ${argumentament3},
argumentament4: ${argumentament4},
wynik: ${wynik}`,
);
return wynik;
}
tablica.reduce(zadanie, 10);
// "argumentament1: 10,
// argumentament2: 10,
// argumentament3: 0,
// argumentament4: 10,20,30,40,50,
// wynik: 20"
// "argumentament1: 20,
// argumentament2: 20,
// argumentament3: 1,
// argumentament4: 10,20,30,40,50,
// wynik: 40"
// "argumentament1: 40,
// argumentament2: 30,
// argumentament3: 2,
// argumentament4: 10,20,30,40,50,
// wynik: 70"
// "argumentament1: 70,
// argumentament2: 40,
// argumentament3: 3,
// argumentament4: 10,20,30,40,50,
// wynik: 110"
// "argumentament1: 110,
// argumentament2: 50,
// argumentament3: 4,
// argumentament4: 10,20,30,40,50,
// wynik: 160"
const obiekt = [{ x: 1 }, { x: 2 }, { x: 3 }];
const wynik = obiekt.reduce(
(argumentament1, argumentament2) => argumentament1 + argumentament2.x,
0,
);
console.log(wynik);
// 6
const obliczenia =
(...zadania) =>
(parametr2) =>
zadania.reduce((acc, fn) => fn(acc), parametr2);
const mnoznie = (x) => 2 * x;
const odejmowanie = (x) => x - 1;
const dodawanie = (x) => 4 + x;
const liczA = obliczenia(mnoznie, odejmowanie);
const liczB = obliczenia(odejmowanie, dodawanie);
const liczC = obliczenia(mnoznie, dodawanie);
const liczD = obliczenia(mnoznie, odejmowanie, dodawanie);
console.log(liczA(5)); // 9
console.log(liczB(10)); // 13
console.log(liczC(15)); // 34
console.log(liczD(20)); // 43
const zadanieAsync =
(...zadania) =>
(parametr2) => // parametr2 = 100
zadania.reduce((argument1, argument2) => argument1.then(argument2), Promise.resolve(parametr2));
const mnozenie = async (a) => a * 4;
const odejmowanie = async (a) => a - 6;
const dzielenie = (a) => a / 2;
const dodawanie = async (a) => a + 9;
zadanieAsync(mnozenie, odejmowanie, dzielenie, dodawanie)(100).then(console.log);
// 206
const zadanieAsync =
(...zadania) =>
(parametr2) => // parametr2 = 100
zadania.reduce(async (argument1, argument2) => argument2(await argument1), parametr2);
const mnozenie = async (a) => a * 4;
const odejmowanie = async (a) => a - 6;
const dzielenie = (a) => a / 2;
const dodawanie = async (a) => a + 9;
zadanieAsync(mnozenie, odejmowanie, dzielenie, dodawanie)(100).then(console.log);
// 206
console.log([1, 5, , 9].reduce((a, b) => a + b));
// 15
console.log([1, 5, undefined, 9].reduce((a, b) => a + b));
// NaN
const tablica = {
length: 4,
0: 1,
1: 3,
2: 7,
3: 9,
};
console.log(Array.prototype.reduce.call(tablica, (x, y) => x + y));
// 20
Opis:
Metoda Array.reduce() wykonuje funkcję wywołania zwrotnego na każdym elemencie tablicy, w kolejności, przekazując wartość zwracaną z obliczeń na poprzednim elemencie. Końcowym wynikiem uruchomienia funkcji na wszystkich elementach tablicy jest pojedyncza wartość. Przy pierwszym uruchomieniu wywołania zwrotnego nie ma wartości zwracanej z poprzedniego obliczenia. Jeśli jest podana, zamiast niej można użyć wartości początkowej. W przeciwnym razie element tablicy o indeksie 0 jest używany jako wartość początkowa, a iteracja rozpoczyna się od następnego elementu (indeks 1 zamiast indeksu 0). Reduktor przechodzi przez tablicę element po elemencie, na każdym kroku dodając bieżącą wartość tablicy do wyniku z poprzedniego kroku, ten wynik jest bieżącą sumą wszystkich poprzednich kroków, dopóki nie będzie już więcej elementów do dodania.
Pierwszy parametr funkcja do wykonania dla każdego elementu w tablicy. Jego wartość zwracana staje się wartością parametru drugiego przy następnym wywołaniu funkcji pierwszego parametru. W przypadku ostatniego wywołania wartość zwracana staje się wartością zwracaną przez reduce(). Funkcja jest wywoływana z następującymi czterema argumentami. Pierwszy argument wartość wynikająca z poprzedniego wywołania do funkcji pierwsze parametru. Przy pierwszym wywołaniu, drugi parametr jeśli określono, w przeciwnym razie wartość array[0]. Drugi argument wartość bieżącego elementu. Przy pierwszym wywołaniu określono wartość array[0] jeśli drugi parametr w przeciwnym razie wartość array[1]. Trzeci argument pozycja indeksu drugiego argumentu tablicy. Przy pierwszym wywołaniu, 0 jeśli drugi argument określono, w przeciwnym razie 1. Czwarty argument tablica reduce() została wywołana.
Drugie parametr opcjonalna wartość, która drugi argument pierwszego parametru jest inicjowana przy pierwszym wywołaniu wywołania zwrotnego. Jeśli drugi parametr określono, funkcja pierwszego parametru rozpoczyna wykonywanie z pierwszą wartością w tablicy jako drugi argument. Jeśli nie jest określony drugi parametr, jest inicjowany do pierwszej wartości w tablicy i rozpoczyna wykonywanie z drugą wartością w tablicy jako drugi argument. W takim przypadku, jeśli tablica jest pusta. Tak, że nie ma pierwszej wartości do zwrócenia jako pierwszy argument, zgłaszany jest błąd.
Zwraca wartość będącą wynikiem uruchomienia funkcji wywołania zwrotnego reduktora do zakończenia w całej tablicy. Zgłaszany błąd, jeśli tablica nie zawiera żadnych elementów i drugi parametr nie został podany.
Funkcja Pierwszego parametru jest wywoływana tylko dla indeksów tablicy, które mają przypisane wartości. Nie jest wywoływana dla pustych gniazd w rzadkich tablicach. Jeśli istniejący, jeszcze nieodwiedzony element tablicy zostanie zmieniony przez pierwszy parametr funkcji, jego wartość przekazana do pierwszego parametru kolejnego wywołania funkcji będzie wartością w momencie, gdy ten element zostanie odwiedzony. Usunięte elementy nie są odwiedzane.
reduce()jest to zawsze równoważne pętli for...of, z wyjątkiem tego, że zamiast mutować zmienną w górnym zakresie, teraz zwracamy nową wartość dla każdej iteracji
// reduce()
const wynik = tablica.reduce((argument1, argument2) => zadanie(argument1, argument2), parametr2);
// for...of:
let wynik = parametr2;
for (const argument2 of tablica) {
wynik = zadanie(wynik, argument2);
}
Zobacz też:
Array.concat() - Metoda Array() zwraca nową tablicę, która jest tablicą wywołującą połączoną z innymi tablicami i/lub wartościami
for...of - pętla