Metode Array.prototype.sort adalah untuk mengurutkan array. Metode ini menggunakan parameter fungsi untuk menentukan aturan pengurutan.
Pertama-tama, mari kita lihat penerapan sederhana pengurutan.
var arr=[2,1,3,4];
alert(arr.sort()) // [1,2,3,4] Urutkan dari kecil ke besar
// Sekarang urutkan dari besar ke kecil untuk mendapatkan [4,3,2,1]
alert(arr.sort(function(left,right){return left>right?-1:1}))
//Di sini, metode pengurutan menggunakan nilai kembalian 1 atau -1 dari fungsi parameter untuk memutuskan apakah akan mengurutkan order atau dalam urutan terbalik
. Ingat apa yang saya katakan sebelumnya tentang penggunaan metode Function.apply untuk mendapatkan elemen terbesar dalam array?
Artikel ini menggunakan dua metode berbeda untuk mendapatkan nilai maksimum dalam sebuah array.
sortir
juga bisa dipamerkan.
var minValue=arr.sort()[0];
var maxValue=arr.sort()[arr.length-1] // Bagaimana dengan arr.sort().pop()
? Ini juga merupakan metode implementasi alternatif.
Namun, saya harus menunjukkan bahwa metode ini adalah yang paling tidak efisien. Anda masih dapat menggunakan teknik ini untuk array dengan puluhan atau ratusan elemen.
Namun, jika arraynya sangat besar, menggunakan metode sort() bisa sangat lambat sehingga membuat Anda ingin merokok
. Diskusi lebih lanjut tentang pengurutan struktur data yang kompleks.
1. Mengurutkan array multidimensi
var arr=[
[2,1,55,4],
[5,3,22,3],
[1,2,77,2],
[9,4,33,5],
];
alert("Default diurutkan berdasarkan kolom pertaman"+arr.sort().join("n"))
alert("Sekarang urutkan berdasarkan kolom ketigan"+arr.sort(function(left,right){return left[2]>right[2]?1:-1}).join("n"))
alert("Sekarang urutkan dalam urutan terbalik berdasarkan kolom ketigan"+arr.sort(function(left,right){return left[2]>right[2]?-1:1}).join("n ") )
2. Urutkan struktur data yang kompleks
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}
function showName(item){alert(item.name)}; //Cetak nama
var arr=[
{nama:"tagihan",uang:500},
{nama:"go_rush",uang:400},
{nama:"dudu",uang:9000}
];
//Tampilkan dudu, bill, go_rush secara berurutan. Tampaknya dudu adalah yang terkaya dan saya yang termiskin.
arr.sort(function(left,right){return left.money>right.money?-1:1}).each(showName)
3. Menyortir tabel, saya membicarakan topik ini dengan semua orang kemarin.
Lihat juga:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
Penyortiran tabel yang lebih kompleks (juga menggunakan fungsi pengurutan Array):
http://community.csdn.net/expert/Topicview2.asp?id=5174915
4. Ada ekstensi yang sangat pintar untuk mengurutkan di Protype.js. Mari kita lihat kodenya terlebih dahulu:
1 sortBy: function(iterator) {
2 kembalikan ini.kumpulkan(fungsi(nilai, indeks) {
3 mengembalikan {nilai: nilai, kriteria: iterator(nilai, indeks)};
4 }).sort(fungsi(kiri, kanan) {
5 var a = kiri.kriteria, b = kanan.kriteria;
6 kembalikan a < b ? -1 : a > b ?
7 }).pluck('nilai');
8},
SortBy ini memungkinkan Anda meneruskan suatu fungsi, menjalankan fungsi dengan setiap elemen array sebagai parameter, dan terakhir mengurutkan hasil yang dikembalikan oleh fungsi tersebut.
Izinkan saya menguraikan fungsinya di bawah ini.
Metode pengumpulan sebenarnya adalah metode peta
Array.prototipe.peta=fungsi(f){
for(var i=0;ret=[];i<ini.panjang;i++) ret[i]=f(ini[i],i,ini)
kembali mundur
}
Misalnya, sekarang
arr=[2,1,4,3]
iterator=function(x){return x*x}
Anda bisa mendapatkan array seperti itu dalam 1-3 baris kode
[
{nilai:2,kriteria:4},
{nilai:1,kriteria:1},
{nilai:4,kriteria:16},
{nilai:3,kriteria:9}
]
4-6 baris kode mengurutkan array berdasarkan kriteria: dari kecil ke besar. Setelah diurutkan, kita dapatkan
[
{nilai:1,kriteria:1},
{nilai:2,kriteria:4},
{nilai:3,kriteria:9},
{nilai:4,kriteria:16}
]
Baris 7 kode adalah yang paling sederhana. Dibutuhkan atribut value dari setiap elemen dan akhirnya mendapatkan [1,2,3,4] untuk mengimplementasikan sortBy(function...) untuk mengurutkan arr.
Mungkin kemampuan ekspresi bahasa saya terbatas. Ketika saya berbicara tentang sortBy di prototype.js, saya tidak tahu bagaimana mengungkapkannya dengan kata-kata.
Saya sangat menyesal semua orang harus bekerja keras untuk membaca kode penjelasan yang saya tulis!
http://www.cnblogs.com/ashun/archive/2006/12/01/sort_sortby_array_prototype.html