Rumah  >  Artikel  >  Java  >  Pengisihan tatasusunan JS: Fahami analisis penggunaan asas kaedah sort().

Pengisihan tatasusunan JS: Fahami analisis penggunaan asas kaedah sort().

王林
王林asal
2023-12-28 16:39:511277semak imbas

Pengisihan tatasusunan JS: Fahami analisis penggunaan asas kaedah sort().

Isihan tatasusunan JS: Analisis penggunaan asas kaedah sort()

Dalam JavaScript, tatasusunan ialah struktur data yang biasa digunakan dan pengisihan ialah operasi biasa untuk menyusun semula elemen dalam tatasusunan. JS menyediakan kaedah sort(), yang boleh mengisih tatasusunan mengikut peraturan tertentu. Artikel ini akan memperkenalkan penggunaan asas kaedah sort() secara terperinci dan memberikan contoh kod khusus.

Kaedah sort() ialah kaedah tatasusunan asli dan boleh digunakan dengan memanggil sort() objek tatasusunan. Ia mempunyai dua kegunaan:

  1. Tiada parameter diluluskan: dalam kes ini, kaedah sort() akan menukar elemen tatasusunan kepada rentetan dan mengisihnya dalam susunan pengekodan Unicode.
  2. Luluskan fungsi perbandingan sebagai parameter: peraturan pengisihan boleh disesuaikan.

Mula-mula, mari kita lihat contoh kod untuk penggunaan pertama:

let arr = [5, 2, 8, 1, 4];
arr.sort();
console.log(arr); // 输出:[1, 2, 4, 5, 8]

Dalam kod di atas, selepas elemen dalam tatasusunan arr ditukar kepada rentetan, ia dikodkan dalam susunan Unicode Sorted. Hasilnya ialah [1, 2, 4, 5, 8]. arr中的元素被转化为字符串后,按照Unicode编码的顺序进行了排序。结果是[1, 2, 4, 5, 8]。

然而,sort()方法默认按照字符串进行排序,这就导致了一些令人困惑的结果。例如:

let arr2 = [10, 100, 1, 20, 2];
arr2.sort();
console.log(arr2); // 输出:[1, 10, 100, 2, 20]

在上述代码中,数组arr2的排序结果并不是我们期望的:[1, 2, 10, 20, 100],而是[1, 10, 100, 2, 20]。这是因为在排序过程中,它将数字10,100,2和20先转化为字符串,然后按照Unicode编码的顺序排序,因此得到了不正确的结果。

为了解决这个问题,我们需要使用第二种用法:传递一个比较函数作为参数。比较函数需要有两个参数,它会将两个要比较的元素传递给该函数,并根据函数的返回值来决定它们的排序顺序。

下面是一个具体的示例代码:

let arr3 = [10, 100, 1, 20, 2];
arr3.sort(function(a, b) {
    return a - b;
});
console.log(arr3); // 输出:[1, 2, 10, 20, 100]

在上面的代码中,我们传递了一个比较函数给sort()方法。该比较函数返回a - b的结果,这将使得数组内的元素按照从小到大的顺序进行排序。结果是[1, 2, 10, 20, 100]。

除了使用a - b

Walau bagaimanapun, kaedah sort() mengisih mengikut rentetan secara lalai, yang membawa kepada beberapa hasil yang mengelirukan. Contohnya:

let arr4 = ["apple", "banana", "cherry", "date"];
arr4.sort(function(a, b) {
    return a.length - b.length;
});
console.log(arr4); // 输出:["date", "apple", "cherry", "banana"]

Dalam kod di atas, hasil pengisihan tatasusunan arr2 bukanlah seperti yang kita jangkakan: [1, 2, 10, 20, 100], tetapi [1, 10, 100 , 2 , 20]. Ini kerana semasa proses pengisihan, ia menukar nombor 10, 100, 2, dan 20 kepada rentetan dahulu, dan kemudian mengisihnya mengikut susunan pengekodan Unicode, supaya ia mendapat hasil yang salah.


Untuk menyelesaikan masalah ini, kita perlu menggunakan penggunaan kedua: menghantar fungsi perbandingan sebagai parameter. Fungsi perbandingan memerlukan dua parameter, ia akan melepasi dua elemen untuk dibandingkan dengan fungsi, dan menentukan susunan pengisihannya berdasarkan nilai pulangan fungsi.

🎜Berikut ialah kod contoh khusus: 🎜rrreee🎜Dalam kod di atas, kami menghantar fungsi perbandingan kepada kaedah sort(). Fungsi perbandingan ini mengembalikan hasil a - b, yang akan menyusun elemen dalam tatasusunan daripada kecil kepada besar. Hasilnya ialah [1, 2, 10, 20, 100]. 🎜🎜Selain menggunakan a - b sebagai fungsi perbandingan, kami juga boleh menggunakan fungsi lain untuk menentukan peraturan pengisihan. Berikut ialah contoh pengisihan mengikut panjang rentetan: 🎜rrreee🎜Dalam kod di atas, kami menghantar fungsi perbandingan tersuai kepada kaedah sort(). Fungsi perbandingan ini mengembalikan hasil a.length - b.length, yang akan mengisih rentetan dalam tatasusunan daripada panjang terpendek kepada panjang terpanjang. Hasilnya ialah ["kurma", "epal", "ceri", "pisang"]. 🎜🎜Ringkasan: 🎜Kaedah susunan tatasusunan() JS ialah alat pengisihan yang berkuasa dan praktikal. Dengan menggunakan parameter yang berbeza, tatasusunan boleh diisih mengikut peraturan yang berbeza. Apabila menggunakan kaedah sort(), jika anda hanya ingin mengisih mengikut susunan pengekodan Unicode lalai, anda boleh memanggil kaedah sort() secara terus tanpa menghantar parameter. Jika anda perlu menyesuaikan peraturan pengisihan, anda boleh melakukannya dengan menghantar fungsi perbandingan sebagai parameter. 🎜

Atas ialah kandungan terperinci Pengisihan tatasusunan JS: Fahami analisis penggunaan asas kaedah sort().. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn