Hari ini izinkan saya memperkenalkan metode ini secara mendetail, saya harap ini dapat membantu Anda. Ini adalah penggunaan dasar pengurangan: Reduce adalah metode pada objek prototipe array yang membantu kita mengoperasikan array. Dibutuhkan fungsi lain sebagai argumennya, yang bisa disebut peredam. peredam mengambil dua parameter. Parameter pertama param1 adalah hasil dari pengoperasian peredam terakhir. Jika ini adalah pertama kalinya peredam dijalankan, nilai default param1 adalah nilai elemen pertama array. Metode pengurangan mengulang setiap elemen dalam array, seperti dalam perulangan for. Dan berikan nilai saat ini dalam loop sebagai parameter 2. Setelah melintasi array, pengurangan akan mengembalikan hasil yang dihitung oleh peredam terakhir. Mari kita lihat contoh detailnya. Selanjutnya, mari kita jelajahi bagaimana kode di atas dijalankan. Dalam kode ini, peredam ditambahkan. Pertama, karena kita mengeksekusi add untuk pertama kalinya, elemen pertama 'a' dalam array akan diperlakukan sebagai parameter pertama dari add, dan kemudian loop akan dimulai dari elemen kedua 'b' dari array. Kali ini, 'b' adalah argumen kedua yang ditambahkan. Setelah perhitungan pertama, kita mendapatkan hasil 'ab'. Hasil ini akan di-cache dan digunakan sebagai param1 pada penghitungan penjumlahan berikutnya. Pada saat yang sama, parameter ketiga 'c' dalam array akan digunakan sebagai param2 add. Demikian pula, pengurangan berlanjut melalui elemen-elemen dalam array, menjalankan 'abc' dan 'd' sebagai argumen untuk ditambahkan. Terakhir, setelah melintasi elemen terakhir dalam array, hasil perhitungan dikembalikan. Sekarang kita mendapatkan hasilnya: 'abcde'. Jadi, kita dapat melihat bahwa pengurangan juga merupakan cara untuk melintasi sebuah array! Dibutuhkan nilai setiap elemen dalam array secara bergantian dan menjalankan fungsi peredam. Namun kita dapat melihat bahwa lingkaran di atas tidak memiliki keindahan yang harmonis. Karena kita mengambil elemen pertama array, yaitu 'a', sebagai param1 awal, lalu mengulang elemen kedua array untuk mendapatkan param2. Faktanya, kita dapat menentukan parameter kedua dalam pengurangan sebagai nilai awal param1 dari fungsi peredam, sehingga param2 akan diperoleh dalam satu perulangan yang dimulai dari elemen pertama array. Kodenya adalah sebagai berikut: Kali ini, pertama-tama kita memanggil peredam dengan 's' sebagai param1, lalu melakukan iterasi melalui array mulai dari elemen pertama. Jadi kita bisa menulis ulang cuplikan kode pertama kita menggunakan sintaks ini. Selanjutnya, kita akan memasuki bab pemrograman sebenarnya untuk merasakan kekuatan pengurangan yang kuat. Apa yang akan Anda lakukan jika kita ingin mendapatkan jumlah semua elemen dalam sebuah array? Secara umum, Anda mungkin menulis sesuatu seperti ini: Tentu saja, Anda mungkin memiliki cara lain untuk menulisnya, tetapi selama Anda menggunakan perulangan for, kode tersebut akan menjadi mubazir. Mari kita lihat fungsi akumulasi di atas: Tetapkan jumlah awal ke nol Dapatkan elemen pertama dalam array dan jumlahkan Simpan hasil penjumlahan dari langkah sebelumnya Keluarkan elemen lain dalam array secara bergantian dan lakukan operasi di atas mengembalikan hasil akhir Kita dapat melihat bahwa ketika kita mendeskripsikan langkah-langkah di atas dengan kata-kata, terlihat jelas bahwa langkah tersebut sesuai dengan penggunaan pengurangan. Jadi kita bisa menulis ulang kode di atas menggunakan pengurangan: Jika Anda terbiasa menggunakan fungsi panah, kode di atas akan terlihat lebih rapi: Satu baris kode dan selesai! Tentu saja, perkalian dan akumulasi kumulatif sama persis: Seringkali, kita perlu menambahkan bobot saat menjumlahkan, yang dapat lebih mencerminkan keanggunan pengurangan. Jika Anda ingin mendapatkan nilai maksimum dan minimum dari sebuah array, Anda dapat menulis: Ini sama seperti sebelumnya, jika kita menggunakan pengurangan kita bisa melakukannya dalam satu baris kode. Kita sering kali perlu menghitung jumlah kemunculan setiap elemen dalam sebuah array. Metode pengurangan membantu kita mencapai hal ini. Perhatikan bahwa kita menggunakan objek peta alih-alih objek untuk menyimpan frekuensi statistik, karena elemen dalam array mungkin bertipe objek, dan kunci objek hanya dapat bertipe string atau simbol. Berikut dua contohnya: Demikian pula, jika Anda ingin menghitung frekuensi setiap karakter dalam sebuah string, Anda dapat mengonversi string tersebut menjadi array karakter terlebih dahulu, lalu ikuti metode di atas. Karena tipe karakter dapat digunakan sebagai kunci untuk objek, kita tidak akan menggunakan Peta di sini. Setiap elemen dalam array diakses secara berurutan melalui pengurangan. Jika kita menemukan bahwa elemen tersebut masih berupa array, kita memanggil metode flat secara rekursif. Kata pengantar
var arr = [1, 2, 3];
peredam fungsi(parmar1, parmar2){
}
arr.reduce(peredam)
var arr = ['a', 'b', 'c', 'd', 'e'];
fungsi tambah(x, y) {
kembalikan x + y;
}
arr.kurangi(tambah)
var arr = ['a', 'b', 'c', 'd', 'e'];
fungsi tambah(x, y) {
kembalikan x + y;
}
arr.reduce(tambahkan, 's')
var arr = ['a', 'b', 'c', 'd', 'e'];
fungsi tambah(x, y) {
kembalikan x + y;
}
arr.kurangi(tambah, '')
1. Akumulasi dan perkalian kumulatif
akumulasi fungsi(arr) {
misalkan jumlah = 0;
for (misalkan i = 0; i < arr.length; i++) {
jumlah = jumlah + arr[i];
}
jumlah pengembalian;
}
akumulasi fungsi(arr) {
peredam fungsi(x, y) {
kembalikan x + y
}
return arr.reduce(peredam, 0);
}
akumulasi fungsi(arr) {
return arr.reduce((x, y) => x + y, 0);
}
perkalian fungsi(arr) {
return arr.reduce((x, y) => x * y, 1);
}
skor konstan = [
{skor: 90, subjek: "HTML", berat: 0,2 },
{skor: 95, subjek: "CSS", berat: 0,3 },
{ skor: 85, subjek: "JavaScript", berat: 0,5 }
];
hasil const = skor.reduce((x, y) => x + y.score * y.weight, 0);
2. Dapatkan nilai maksimum dan minimum dari sebuah array
fungsi maks(arr){
biarkan maks = arr[0];
untuk (biarkan ele dari arr) {
jika(ele > maks) {
maks = ele;
}
}
pengembalian maks;
}
misalkan arr = [3.24, 2.78, 999];
arr.reduce((x, y) => Math.max(x, y));
arr.reduce((x, y) => Matematika.min(x, y));
3. Hitung frekuensi kemunculan elemen dalam array
fungsi countFrequency(arr) {
return arr.reduce(function(hasil, ele){
// Nilailah apakah elemen ini telah dihitung sebelumnya
if (hasil.dapatkan(ele) != tidak terdefinisi) {
/**
* Jika elemen ini telah dihitung sebelumnya,
* tingkatkan frekuensi kemunculannya sebanyak 1
*/
hasil.set(ele, hasil.get(ele) + 1)
} kalau tidak {
/**
* Jika elemen ini belum pernah dihitung sebelumnya,
* atur frekuensi kemunculannya menjadi 1
*/
hasil.set(ele, 1);
}
hasil pengembalian;
}, Peta baru());
}
biarkan str = 'halo dunia';
str.split('').reduce((hasil, CurrentChar) => {
hasil[Char saat ini] ? hasil[Char saat ini] ++ : hasil[Char saat ini] = 1;
hasil pengembalian;
}, {})
4. Perataan beberapa array
fungsi Datar(arr = []) {
return arr.reduce((t, v) => t.concat(Array.isArray(v) ? Flat(v) : v), [])
}