Rumah  >  Artikel  >  hujung hadapan web  >  Adakah Array.sort() stabil merentas pelayar yang berbeza?

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

Linda Hamilton
Linda Hamiltonasal
2024-11-02 13:38:30190semak imbas

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>

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!

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