Dalam JavaScript, Anda dapat menggunakan nilai maksimum built-in Math.max (), tetapi masih sulit untuk mengekstraksi nilai maksimum dari beberapa array.
Deskripsi masalah
Misalkan Anda memiliki array, dan array ini berisi subarray angka, dan yang ingin kami lakukan adalah mengembalikan angka maksimum terbesarnya dari setiap subarray dalam array.
Solusi dasar
function thargeoffour (arr) {var result = []; // Buat variabel hasil untuk disimpan // Buat loop luar untuk melintasi array luar untuk (var n = 0; n <arr.length; n ++) {var largenumber = 0; // Buat variabel kedua untuk menyimpan angka terbesar // Buat loop lain untuk melintasi subarray untuk (var sb = 0; sb <arr [n] .length; sb ++) {// Periksa apakah elemen subarray lebih besar dari nilai maksimum yang tersimpan jika ini nilai largeumberer. arr[n][sb];}}// After an internal loop, save the value in each subarray to the array results results[n] = largeNumber;}// Return the array return results;}largestOfFour([[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]]); // [34, 456, 4567, 78]Metode di atas adalah solusi normal, melintasi array dan subarraysnya melalui dua untuk loop:
Buat variabel hasil untuk menyimpan nilai maksimum yang dilintasi di setiap subarray
Buat loop luar untuk melintasi array luar
Buat variabel kedua, jumlah besar, untuk menyimpan nilai maksimum. Nilai variabel ini harus ditempatkan di luar internal untuk loop, karena tidak akan ditanyai
Buat detik untuk loop untuk beralih melalui setiap elemen di subarray
Pernyataan IF digunakan untuk menentukan apakah elemen subarray saat ini lebih besar dari nilai maksimum yang disimpan dalam subarray saat ini. Jika benar, simpan nilai maksimum ini ke largenumber.
Setelah loop internal selesai, nilai maksimum di setiap subarray disimpan dalam hasil variabel yang awalnya dinyatakan
Akhirnya Mengembalikan Array Hasil
Setelah mengambil setiap nilai maksimum di semua subarray, Anda akan mendapatkan hasil array baru. Saat ini, Anda hanya perlu lulus:
Array.prototype.max = function () {return math.max.Apply ({}, this);} terbesaroffour (arr) .max ();Anda bisa mendapatkan nilai maksimum.
Besaroffour ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]]). Max (); // 4567
Solusi Menengah
function besar (ARR) {// Gunakan metode peta () dan fungsi panggilan balik untuk menggabungkan nilai maksimum dalam subarray bersama -sama untuk mendapatkan array pengembalian array baru arr.map (fungsi (grup) {// Gunakan metode pengurangan untuk mengembalikan nilai maksimum di setiap subarray ke grup grup pengembalian. Sebelumnya;});});});} besar -besaran OMBESTOUR ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]]); // [34, 456, 4567, 78]Gunakan metode array.prototype.map () untuk mengulangi melalui array di array luar. Gunakan metode MAP () untuk melintasi array dan fungsi panggilan balik akan dipanggil. Dalam fungsi callback ini, setiap grup subarray digabungkan menggunakan metode Rededang () untuk mengembalikan nilai ke array baru. Saat menggunakan metode Rededang (), fungsi panggilan balik juga akan dipanggil. Fungsi panggilan balik ini hanya melakukan satu hal, yaitu membandingkan elemen -elemen di subarray. Jika saat ini lebih besar dari prev, arus akan dikembalikan, jika tidak, sebelumnya akan dikembalikan, dan nilai maksimum di setiap subarray akan diperoleh.
Seperti sebelumnya, nilai maksimum akhirnya diperoleh melalui math.max.apply ().
Solusi terbaik
FUNGSI PERBIRAH (ARR) {return arr.map (function.apply.bind (Math.max, null));} terbesar ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]]); // [34, 456, 4567, 78]Dalam skema ini, menggunakan metode Function.Bind untuk membuat fungsi callback khusus, yang mirip dengan metode Math.max, tetapi memiliki fungsi Function.prototype.Apply yang mengambil array sebagai parameternya.
Pertama kali mengulangi setiap elemen dalam array utama, yaitu, setiap subarray di dalam array
Menggunakan metode MAP () memerlukan fungsi panggilan balik untuk menemukan nilai maksimum di setiap array di dalamnya. Anda perlu membuat fungsi yang memungkinkan Math.max untuk menerima pekerjaan array input. Dengan kata lain, ini sangat sederhana dan bekerja dengan sangat baik, seperti Math.max ([9,43,20,6]); akan mengembalikan nilai maksimum 43
Metode Function.Prototype.Apply dapat menerima array sebagai parameter, tetapi fungsi menggunakan konteks panggilan, yang sedikit rumit. Misalnya, Math.max.Apply (NULL, [9,43,20,6]) akan memanggil metode max.max, tetapi metode seperti itu tidak mudah ditemukan.
Di sini, parameter nol diteruskan ke metode function.prototype.Apply, memberi tahu Math.max bahwa tidak ada konteks yang diperlukan.
Karena arr.map () memerlukan fungsi panggilan balik, bukan hanya ekspresi, kami menyediakan fungsi dalam metode function.bind
Karena function.prototype.apply adalah metode statis, mirip dengan objek fungsi, kita dapat menyebutnya function.prototype.bind terikat ke function.prototype.apply. Misalnya: function.Amply.bind
Konteksnya sekarang dapat ditentukan melalui fungsi callback function.prototype.apply.bind, seperti metode Math.max dalam contoh ini
Karena tertanam dalam fungsi Function.prototype.Apply, konteks diperlukan sebagai parameter pertama, dan konteks ini masih salah.
Jadi kami meneruskan nol sebagai parameter kedua ke function.prototype.apply.bind dan mengikat konteks, yang merupakan metode Math.max
Karena Math.max tidak tergantung pada konteks apa pun, ia mengabaikan konteks palsu dari fungsi tersebut.prototype.Apply Metode Call
Kami menggunakan function.prototype.apply.bind (math.max, null) untuk membuat fungsi baru menerima nilai arr.map, seperti subarray dalam array
Ambil nilai maksimum dalam array multi-dimensi
Di atas menggunakan metode yang berbeda untuk mengekstraksi nilai maksimum dari subarray dari array dua dimensi dan membentuk kembali nilai-nilai maksimum ini menjadi array baru. Jika Anda memperpanjangnya, Anda juga perlu menggunakan fungsi array.prototype.max untuk mendapatkan nilai maksimum melalui math.max.apply ({}, ini) dalam fungsi. Namun, jika itu bukan array dua dimensi, metode di atas tidak akan dapat mengambil nilai terbesar dalam array.
Untuk mendapatkan nilai maksimum dalam array multi-dimensi, Anda dapat menggabungkannya dengan metode gabungan () dan split ():
function thargeoffour (arr) {var newArray = arr.join (","). split (","); return math.max.Apply ({}, newArray);} terbesaroffour ([12,23]); // => 23Dargestoffour ([12,23, [1234.324], [345.566]]); // => 1234gestoffour ([12,23, [1234.324, [23121.90890]], [345.566, [345,78,90]]]); // => 1234gestoffour ([12,23, [1234.324, [23121.90890]], [345.566, [345,78,90]]]); // => 90890 BLArgestoffour ([12,23, [1234.324, [23121.90890]], [345.566, [345,78,90, [90909090.988]]]]]); // => 9090909090Anda juga dapat menggunakan metode serupa untuk menghapus nilai minimum dalam array multi-dimensi:
function loowseFrour (arr) {var newArray = arr.join (","). split (","); return math.min.apply ({}, newArray);} lebih kecil ([12,23]); // => 12smalleroffour ([112,23, [1234.324], [345.566]]); // => 23smalleroffour ([212.123, [1234.324, [23121.90890]], [345.566, [345,78,90]]]); // => 23smalleroffour ([212.123, [1234.324, [23121.90890]], [345.566, [345,78,90]]]); // => 78SmallerOffour ([102.230, [1234.324, [23121.90890]], [345.566, [345,78,90, [90909090.988]]]]]); // => 78Meringkaskan
Dalam artikel "Catatan Pembelajaran JavaScript: Mengambil nilai maksimum dan minimum dalam array", Math.max.Apply ({}, ARR) diperkenalkan untuk mendapatkan angka terbesar dalam array. Artikel ini memperkenalkan cara mengekstraksi angka terbesar dari array dua dimensi dari sudut yang berbeda, tetapi dalam banyak kasus, array juga memiliki array multi-dimensi. Artikel ini akhirnya memperkenalkan cara mengekstraksi nilai terbesar dari array multi-dimensi. Jika Anda memiliki lebih banyak solusi, silakan bagikan dengan kami di komentar.