Contoh
Kurangi semua angka dalam array
angka const = [175, 50, 25];
dokumen. getElementById("demo"). innerHTML = angka. kurangi(myFunc);
function myFunc(total, num) {
mengembalikan total - num;
}
Bulatkan semua angka dan tampilkan jumlahnya
angka const = [15. 5, 2. 3, 1. 1, 4. 7];
dokumen. getElementById("demo"). innerHTML = angka. kurangi(getSum, 0);
fungsi getSum(total, num) {
mengembalikan total + Matematika. bulat(bil);
}
Definisi dan Penggunaan
Metode reduce() mengeksekusi fungsi peredam untuk elemen array
Metode reduce() mengembalikan nilai tunggal. hasil akumulasi fungsi
Metode reduce() tidak menjalankan fungsi untuk elemen array kosong
Metode reduce() tidak mengubah array asli
Catatan
Pada callback pertama, tidak ada nilai kembalian dari callback sebelumnya
Biasanya, elemen array 0 digunakan sebagai nilai awal, dan iterasi dimulai dari elemen array 1
Jika nilai awal diberikan, ini digunakan, dan iterasi dimulai dari elemen array 0
Lihat juga
Metode Array reduceRight()
Sintaksis
Himpunan. kurangi (fungsi (total, Nilai saat ini, Indeks saat ini, arr), nilai awal)
Parameter
ParameterDescriptionfunction()DiperlukanFungsi yang akan dijalankan untuk setiap elemen dalam larik. Parameter fungsi peredam. totalDiperlukan
initialValue, atau nilai fungsi yang dikembalikan sebelumnya. CurrentValueRequired
Nilai elemen saat ini. CurrentIndexOptional
Indeks elemen saat ini. arrOptional
Array milik elemen saat ini. initialValueOptional
Nilai yang akan diteruskan ke fungsi sebagai nilai awal
Nilai Pengembalian
Hasil akumulasi dari panggilan terakhir fungsi callbackDukungan Peramban
reduce()_ adalah fitur ECMAScript5 (ES5).
ES5 (JavaScript 2009) didukung penuh di semua browser
ChromeEdgeFirefoxSafariOperaIEYaYaYaYa9-11Metode const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 mengeksekusi fungsi callback "reducer" yang disediakan pengguna pada setiap elemen array, secara berurutan, meneruskan nilai kembalian dari perhitungan pada elemen sebelumnya. Hasil akhir menjalankan peredam di semua elemen array adalah satu nilai
Pertama kali callback dijalankan tidak ada "nilai kembalian dari perhitungan sebelumnya". Jika disediakan, nilai awal dapat digunakan sebagai gantinya. Jika tidak, elemen array pada indeks 0 digunakan sebagai nilai awal dan iterasi dimulai dari elemen berikutnya (indeks 1 bukan indeks 0)
Mungkin kasus yang paling mudah dipahami untuk const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 adalah mengembalikan jumlah semua elemen dalam array
Peredam berjalan melalui elemen-demi-elemen array, pada setiap langkah menambahkan nilai array saat ini ke hasil dari langkah sebelumnya (hasil ini adalah jumlah berjalan dari semua langkah sebelumnya) — sampai tidak ada lagi elemen untuk ditambahkan
// Arrow function reduce((accumulator, currentValue) => { /* … */ }) reduce((accumulator, currentValue, currentIndex) => { /* … */ }) reduce((accumulator, currentValue, currentIndex, array) => { /* … */ }) reduce((accumulator, currentValue) => { /* … */ }, initialValue) reduce((accumulator, currentValue, currentIndex) => { /* … */ }, initialValue) reduce((accumulator, currentValue, currentIndex, array) => { /* … */ }, initialValue) // Callback function reduce(callbackFn) reduce(callbackFn, initialValue) // Inline callback function reduce(function (accumulator, currentValue) { /* … */ }) reduce(function (accumulator, currentValue, currentIndex) { /* … */ }) reduce(function (accumulator, currentValue, currentIndex, array) { /* … */ }) reduce(function (accumulator, currentValue) { /* … */ }, initialValue) reduce(function (accumulator, currentValue, currentIndex) { /* … */ }, initialValue) reduce(function (accumulator, currentValue, currentIndex, array) { /* … */ }, initialValue)
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _7
Fungsi untuk mengeksekusi setiap elemen dalam array. Nilai pengembaliannya menjadi nilai parameter const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 8 pada pemanggilan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 berikutnya. Untuk pemanggilan terakhir, nilai yang dikembalikan menjadi nilai yang dikembalikan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5
Fungsi tersebut dipanggil dengan argumen berikut
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _8Nilai yang dihasilkan dari panggilan sebelumnya ke const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7. Pada panggilan pertama, const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _3 jika ditentukan, jika tidak, nilai const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 4
const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _5Nilai elemen saat ini. Pada panggilan pertama, nilai const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _4 jika const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 3 ditentukan, jika tidak, nilai const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 8
const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _9Posisi indeks const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _5 dalam larik. Pada panggilan pertama, [15, 16, 17, 18, 19].reduce( (accumulator, currentValue) => accumulator + currentValue, 10, ); 1 jika const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 3 ditentukan, jika tidak [15, 16, 17, 18, 19].reduce( (accumulator, currentValue) => accumulator + currentValue, 10, ); 3
[15, 16, 17, 18, 19].reduce( (accumulator, currentValue) => accumulator + currentValue, 10, ); _4Array const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _5 dipanggil
const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 3 OpsionalNilai yang const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _8 diinisialisasi saat pertama kali callback dipanggil. Jika const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _3 ditentukan, const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 mulai mengeksekusi dengan nilai pertama dalam larik sebagai const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 5. Jika const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _3 tidak ditentukan, const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 8 diinisialisasi ke nilai pertama dalam larik, dan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 mulai mengeksekusi dengan nilai kedua dalam larik sebagai const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 5. Dalam hal ini, jika array kosong (sehingga tidak ada nilai pertama yang dikembalikan sebagai const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 8), kesalahan akan terjadi
Nilai yang dihasilkan dari menjalankan fungsi panggilan balik "peredam" hingga penyelesaian seluruh larik
const objects = [{ x: 1 }, { x: 2 }, { x: 3 }]; const sum = objects.reduce( (accumulator, currentValue) => accumulator + currentValue.x, 0, ); console.log(sum); // 6 _6
Larik tidak berisi elemen dan const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _3 tidak disediakan
Metode const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 adalah sebuah. Ini menjalankan fungsi panggilan balik "peredam" pada semua elemen dalam larik, dalam urutan indeks naik, dan mengakumulasikannya menjadi satu nilai. Setiap kali, nilai pengembalian const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _7 diteruskan ke const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 lagi pada pemanggilan berikutnya sebagai const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 8. Nilai akhir dari const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 8 (yang merupakan nilai yang dikembalikan dari const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 pada iterasi terakhir dari array) menjadi nilai kembalian dari const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 dipanggil hanya untuk indeks array yang telah menetapkan nilai. Itu tidak dipanggil untuk slot kosong
Tidak seperti yang lain, const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 tidak menerima argumen const flattened = [ [0, 1], [2, 3], [4, 5], ].reduce((accumulator, currentValue) => accumulator.concat(currentValue), []); // flattened is [0, 1, 2, 3, 4, 5] 7. const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 selalu dipanggil dengan const flattened = [ [0, 1], [2, 3], [4, 5], ].reduce((accumulator, currentValue) => accumulator.concat(currentValue), []); // flattened is [0, 1, 2, 3, 4, 5] 9 sebagai const names = ["Alice", "Bob", "Tiff", "Bruce", "Alice"]; const countedNames = names.reduce((allNames, name) => { const currCount = allNames[name] ?? 0; return { ...allNames, [name]: currCount + 1, }; }, {}); // countedNames is: // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 } 0, yang diganti dengan const names = ["Alice", "Bob", "Tiff", "Bruce", "Alice"]; const countedNames = names.reduce((allNames, name) => { const currCount = allNames[name] ?? 0; return { ...allNames, [name]: currCount + 1, }; }, {}); // countedNames is: // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 } 1 jika const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 tidak ketat
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 adalah konsep sentral dalam pemrograman fungsional, di mana tidak mungkin mengubah nilai apa pun, jadi untuk mengakumulasi semua nilai dalam array, seseorang harus mengembalikan nilai akumulator baru pada setiap iterasi. Konvensi ini menyebar ke const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 JavaScript. Anda harus menggunakan metode penyebaran atau penyalinan lainnya jika memungkinkan untuk membuat larik dan objek baru sebagai akumulator, daripada memutasikan yang sudah ada. Jika Anda memutuskan untuk mengubah akumulator alih-alih menyalinnya, ingatlah untuk tetap mengembalikan objek yang dimodifikasi dalam panggilan balik, atau iterasi berikutnya akan menerima undefined
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 tidak mengubah array yang dipanggil, tetapi fungsi yang disediakan sebagai const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 dapat. Perhatikan, bagaimanapun, bahwa panjang array disimpan sebelum pemanggilan pertama dari const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7. Karena itu
- const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 tidak akan mengunjungi elemen apa pun yang ditambahkan melebihi panjang awal array saat panggilan ke const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 dimulai
- Perubahan pada indeks yang sudah dikunjungi tidak menyebabkan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 dipanggil lagi
- Jika ada elemen array yang belum dikunjungi diubah oleh const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7, nilainya diteruskan ke const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7 akan menjadi nilai pada saat elemen dikunjungi. Elemen yang dihapus tidak dikunjungi
Peringatan. Modifikasi bersamaan dari jenis yang dijelaskan di atas sering menyebabkan kode yang sulit dipahami dan umumnya harus dihindari (kecuali dalam kasus khusus)
Metode const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 adalah. Itu hanya mengharapkan nilai const names = ["Alice", "Bob", "Tiff", "Bruce", "Alice"]; const countedNames = names.reduce((allNames, name) => { const currCount = allNames[name] ?? 0; return { ...allNames, [name]: currCount + 1, }; }, {}); // countedNames is: // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 } _0 memiliki properti const people = [ { name: "Alice", age: 21 }, { name: "Max", age: 20 }, { name: "Jane", age: 20 }, ]; function groupBy(objectArray, property) { return objectArray.reduce((acc, obj) => { const key = obj[property]; const curGroup = acc[key] ?? []; return { ...acc, [key]: [...curGroup, obj] }; }, {}); } const groupedPeople = groupBy(people, "age"); console.log(groupedPeople); // { // 20: [ // { name: 'Max', age: 20 }, // { name: 'Jane', age: 20 } // ], // 21: [{ name: 'Alice', age: 21 }] // } 5 dan properti dengan kunci bilangan bulat
Fungsi rekursif seperti const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 bisa sangat berguna, tetapi terkadang sulit dipahami, terutama bagi pengembang JavaScript yang kurang berpengalaman. Jika kode menjadi lebih jelas saat menggunakan metode larik lainnya, pengembang harus mempertimbangkan tradeoff keterbacaan terhadap manfaat lain menggunakan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5. Dalam kasus di mana const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 adalah pilihan terbaik, dokumentasi dan penamaan variabel semantik dapat membantu mengurangi kelemahan keterbacaan
Jika array hanya memiliki satu elemen (terlepas dari posisinya) dan tidak ada const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 3 yang disediakan, atau jika const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 3 disediakan tetapi array kosong, nilai tunggal akan dikembalikan tanpa memanggil const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 7
Jika const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _3 disediakan dan array tidak kosong, maka metode pengurangan akan selalu memanggil fungsi callback mulai dari indeks 0
Jika const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 3 tidak disediakan maka metode pengurangan akan bertindak berbeda untuk array dengan panjang lebih besar dari 1, sama dengan 1 dan 0, seperti yang ditunjukkan pada contoh berikut
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError
Kode di bawah menunjukkan apa yang terjadi jika kita memanggil const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 dengan array dan tanpa nilai awal
const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); _
Panggilan balik akan dipanggil empat kali, dengan argumen dan nilai kembalian di setiap panggilan sebagai berikut
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 8const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 5// friends - an array of objects // where object field "books" is a list of favorite books const friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21, }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26, }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18, }, ]; // allbooks - list which will contain all friends' books + // additional list contained in initialValue const allbooks = friends.reduce( (accumulator, currentValue) => [...accumulator, ...currentValue.books], ["Alphabet"], ); console.log(allbooks); // [ // 'Alphabet', 'Bible', 'Harry Potter', 'War and peace', // 'Romeo and Juliet', 'The Lord of the Rings', // 'The Shining' // ] 7Return valueFirst call// friends - an array of objects // where object field "books" is a list of favorite books const friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21, }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26, }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18, }, ]; // allbooks - list which will contain all friends' books + // additional list contained in initialValue const allbooks = friends.reduce( (accumulator, currentValue) => [...accumulator, ...currentValue.books], ["Alphabet"], ); console.log(allbooks); // [ // 'Alphabet', 'Bible', 'Harry Potter', 'War and peace', // 'Romeo and Juliet', 'The Lord of the Rings', // 'The Shining' // ] 8// friends - an array of objects // where object field "books" is a list of favorite books const friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21, }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26, }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18, }, ]; // allbooks - list which will contain all friends' books + // additional list contained in initialValue const allbooks = friends.reduce( (accumulator, currentValue) => [...accumulator, ...currentValue.books], ["Alphabet"], ); console.log(allbooks); // [ // 'Alphabet', 'Bible', 'Harry Potter', 'War and peace', // 'Romeo and Juliet', 'The Lord of the Rings', // 'The Shining' // ] 9[15, 16, 17, 18, 19].reduce( (accumulator, currentValue) => accumulator + currentValue, 10, ); 3const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 1Second callconst myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 1const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 3const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 4const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 5Third callconst myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 5const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 7const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 8const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 9Fourth callconst myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 9const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 01const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 02const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 03Parameter [15, 16, 17, 18, 19].reduce( (accumulator, currentValue) => accumulator + currentValue, 10, ); _4 tidak pernah berubah selama proses — selalu const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 05. Nilai yang dikembalikan oleh const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _5 akan menjadi pemanggilan callback terakhir (const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 03)
Di sini kita mengurangi larik yang sama menggunakan algoritme yang sama, tetapi dengan const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 3 dari const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 09 diteruskan sebagai argumen kedua ke const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5
[15, 16, 17, 18, 19].reduce( (accumulator, currentValue) => accumulator + currentValue, 10, );
Panggilan balik akan dipanggil lima kali, dengan argumen dan nilai kembalian di setiap panggilan sebagai berikut
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 8const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 5// friends - an array of objects // where object field "books" is a list of favorite books const friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21, }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26, }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18, }, ]; // allbooks - list which will contain all friends' books + // additional list contained in initialValue const allbooks = friends.reduce( (accumulator, currentValue) => [...accumulator, ...currentValue.books], ["Alphabet"], ); console.log(allbooks); // [ // 'Alphabet', 'Bible', 'Harry Potter', 'War and peace', // 'Romeo and Juliet', 'The Lord of the Rings', // 'The Shining' // ] 7Return valueFirst callconst getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 09// friends - an array of objects // where object field "books" is a list of favorite books const friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21, }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26, }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18, }, ]; // allbooks - list which will contain all friends' books + // additional list contained in initialValue const allbooks = friends.reduce( (accumulator, currentValue) => [...accumulator, ...currentValue.books], ["Alphabet"], ); console.log(allbooks); // [ // 'Alphabet', 'Bible', 'Harry Potter', 'War and peace', // 'Romeo and Juliet', 'The Lord of the Rings', // 'The Shining' // ] 8[15, 16, 17, 18, 19].reduce( (accumulator, currentValue) => accumulator + currentValue, 10, ); 1const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 17Second callconst getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 17// friends - an array of objects // where object field "books" is a list of favorite books const friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21, }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26, }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18, }, ]; // allbooks - list which will contain all friends' books + // additional list contained in initialValue const allbooks = friends.reduce( (accumulator, currentValue) => [...accumulator, ...currentValue.books], ["Alphabet"], ); console.log(allbooks); // [ // 'Alphabet', 'Bible', 'Harry Potter', 'War and peace', // 'Romeo and Juliet', 'The Lord of the Rings', // 'The Shining' // ] 9[15, 16, 17, 18, 19].reduce( (accumulator, currentValue) => accumulator + currentValue, 10, ); 3const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 21Third callconst getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 21const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 3const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 4const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 25Fourth callconst getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 25const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 7const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates); 8const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 29Fifth callconst getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 29const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 01const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 02const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 33Nilai yang dikembalikan oleh const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _5 dalam hal ini adalah const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 33
Untuk meringkas nilai yang terkandung dalam array objek, Anda harus memberikan const array = [15, 16, 17, 18, 19]; function reducer(accumulator, currentValue, index) { const returns = accumulator + currentValue; console.log( `accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`, ); return returns; } array.reduce(reducer); 3, sehingga setiap item melewati fungsi Anda
const objects = [{ x: 1 }, { x: 2 }, { x: 3 }]; const sum = objects.reduce( (accumulator, currentValue) => accumulator + currentValue.x, 0, ); console.log(sum); // 6
const flattened = [ [0, 1], [2, 3], [4, 5], ].reduce((accumulator, currentValue) => accumulator.concat(currentValue), []); // flattened is [0, 1, 2, 3, 4, 5]
const names = ["Alice", "Bob", "Tiff", "Bruce", "Alice"]; const countedNames = names.reduce((allNames, name) => { const currCount = allNames[name] ?? 0; return { ...allNames, [name]: currCount + 1, }; }, {}); // countedNames is: // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
const people = [ { name: "Alice", age: 21 }, { name: "Max", age: 20 }, { name: "Jane", age: 20 }, ]; function groupBy(objectArray, property) { return objectArray.reduce((acc, obj) => { const key = obj[property]; const curGroup = acc[key] ?? []; return { ...acc, [key]: [...curGroup, obj] }; }, {}); } const groupedPeople = groupBy(people, "age"); console.log(groupedPeople); // { // 20: [ // { name: 'Max', age: 20 }, // { name: 'Jane', age: 20 } // ], // 21: [{ name: 'Alice', age: 21 }] // }
// friends - an array of objects // where object field "books" is a list of favorite books const friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21, }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26, }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18, }, ]; // allbooks - list which will contain all friends' books + // additional list contained in initialValue const allbooks = friends.reduce( (accumulator, currentValue) => [...accumulator, ...currentValue.books], ["Alphabet"], ); console.log(allbooks); // [ // 'Alphabet', 'Bible', 'Harry Potter', 'War and peace', // 'Romeo and Juliet', 'The Lord of the Rings', // 'The Shining' // ]
Catatan. Efek yang sama dapat dicapai dengan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _37 dan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 38 sebagai const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 39 dengan kinerja yang lebih baik
const myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"]; const myArrayWithNoDuplicates = myArray.reduce((accumulator, currentValue) => { if (!accumulator.includes(currentValue)) { return [...accumulator, currentValue]; } return accumulator; }, []); console.log(myArrayWithNoDuplicates);
Menggunakan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _40 lalu const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 41 melintasi array dua kali, tetapi Anda dapat mencapai efek yang sama saat melintasi hanya sekali dengan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5, sehingga menjadi lebih efisien. (Jika Anda suka const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 43 loop, Anda dapat memfilter dan memetakan saat melintasi sekali dengan const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 44. )
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 0
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _1
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _2
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 melewatkan elemen yang hilang dalam array jarang, tetapi tidak melewatkan const flattened = [ [0, 1], [2, 3], [4, 5], ].reduce((accumulator, currentValue) => accumulator.concat(currentValue), []); // flattened is [0, 1, 2, 3, 4, 5] 9 nilai
const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError _3
Metode const getMax = (a, b) => Math.max(a, b); // callback is invoked for each element in the array starting at index 0 [1, 100].reduce(getMax, 50); // 100 [50].reduce(getMax, 10); // 50 // callback is invoked once for element at index 1 [1, 100].reduce(getMax); // 100 // callback is not invoked [50].reduce(getMax); // 50 [].reduce(getMax, 1); // 1 [].reduce(getMax); // TypeError 5 membaca properti const people = [ { name: "Alice", age: 21 }, { name: "Max", age: 20 }, { name: "Jane", age: 20 }, ]; function groupBy(objectArray, property) { return objectArray.reduce((acc, obj) => { const key = obj[property]; const curGroup = acc[key] ?? []; return { ...acc, [key]: [...curGroup, obj] }; }, {}); } const groupedPeople = groupBy(people, "age"); console.log(groupedPeople); // { // 20: [ // { name: 'Max', age: 20 }, // { name: 'Jane', age: 20 } // ], // 21: [{ name: 'Alice', age: 21 }] // } 5 dari const names = ["Alice", "Bob", "Tiff", "Bruce", "Alice"]; const countedNames = names.reduce((allNames, name) => { const currCount = allNames[name] ?? 0; return { ...allNames, [name]: currCount + 1, }; }, {}); // countedNames is: // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 } 0 dan kemudian mengakses setiap indeks bilangan bulat