Adakah Array.sort() stabil merentas pelayar yang berbeza?

Linda Hamilton
Lepaskan: 2024-11-02 13:38:30
asal
190 orang telah melayarinya

Is Array.sort() stable across different browsers?

Apakah kestabilan Array.sort() merentas pelayar yang berbeza?

Kestabilan kaedah Array.sort() yang menentukan sama ada susunan elemen yang sama dikekalkan selepas pengisihan, berbeza-beza antara pelayar yang berbeza:

Setakat ES2019, kaedah isihan perlu stabil:

Ini bermakna bahawa elemen yang sama dalam tatasusunan akan mengekalkan susunan relatifnya selepas mengisih.

Sebelum ES2019, kestabilan adalah bergantung kepada pelayar:

  • IE 6 : Stabil
  • Firefox < 3: Tidak Stabil
  • Firefox >= 3: Stabil
  • Chrome < 70: Tidak Stabil
  • Chrome >= 70: Stabil
  • Opera < 10: Tidak Stabil
  • Opera >= 10: Stabil
  • Safari 4: Stabil
  • Edge: Tidak stabil untuk tatasusunan dengan lebih daripada 512 elemen

Perhatikan bahawa sesetengah versi Chrome bertukar antara jenis stabil dan tidak stabil berdasarkan saiz tatasusunan:

Sebelum Chrome 70, enjin menggunakan jenis yang stabil untuk tatasusunan kecil dan yang tidak stabil untuk tatasusunan yang lebih besar. Ini boleh disahkan menggunakan kes ujian berikut:

<code class="js">function Pair(_x, _y) {
  this.x = _x;
  this.y = _y;
}
function pairSort(a, b) {
  return a.x - b.x;
}
// Create an array with enough entries to trigger the "more efficient" sort method
var y = 0;
var check = [];
while (check.length < 100) {
  check.push(new Pair(Math.floor(Math.random() * 3) + 1, ++y));
}
check.sort(pairSort);
// Check for instability by comparing the order of equal elements
var min = {};
var issues = 0;
for (var i = 0; i < check.length; ++i) {
  var entry = check[i];
  var found = min[entry.x];
  if (found) {
    if (found.y > entry.y) {
      console.log("Unstable at " + found.i + ": " + found.y + " > " + entry.y);
      ++issues;
    }
  } else {
    min[entry.x] = {x: entry.x, y: entry.y, i: i};
  }
}
// Log stability status
if (!issues) {
  console.log("Sort appears to be stable");
}</code>
Salin selepas log masuk

Ujian ini akan menunjukkan ketidakstabilan dalam versi Chrome sebelumnya dan penyemak imbas lain yang melaksanakan jenis tidak stabil.

Atas ialah kandungan terperinci Adakah Array.sort() stabil merentas pelayar yang berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!