Heim  >  Artikel  >  Web-Frontend  >  Ist Array.sort() in verschiedenen Browsern stabil?

Ist Array.sort() in verschiedenen Browsern stabil?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 13:38:30190Durchsuche

Is Array.sort() stable across different browsers?

Wie hoch ist die Stabilität von Array.sort() in verschiedenen Browsern?

Die Stabilität der Array.sort()-Methode, die bestimmt, ob die Reihenfolge gleicher Elemente nach dem Sortieren erhalten bleibt, variiert zwischen verschiedenen Browsern:

Ab ES2019 muss die Sortiermethode stabil sein:

Das bedeutet dass gleiche Elemente im Array nach dem Sortieren ihre relative Reihenfolge beibehalten.

Vor ES2019 war die Stabilität browserabhängig:

  • IE 6 :Stabil
  • Firefox < 3:Instabil
  • Firefox >= 3:Stabil
  • Chrome < 70:Instabil
  • Chrome >= 70:Stabil
  • Opera < 10:Instabil
  • Opera >= 10:Stabil
  • Safari 4:Stabil
  • Kante:Instabil für Arrays mit mehr als 512 Elementen

Beachten Sie, dass einige Versionen von Chrome basierend auf der Array-Größe zwischen stabilen und instabilen Sortierungen umgeschaltet haben:

Vor Chrome 70 verwendete die Engine eine stabile Sortierung für kleine Arrays und eine instabile Sortierung für größere Arrays. Dies kann mithilfe des folgenden Testfalls überprüft werden:

<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>

Dieser Test zeigt Instabilität in früheren Versionen von Chrome und anderen Browsern, die instabile Sortierungen implementiert haben.

Das obige ist der detaillierte Inhalt vonIst Array.sort() in verschiedenen Browsern stabil?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn