ホームページ >ウェブフロントエンド >jsチュートリアル >Array.sort() はさまざまなブラウザ間で安定していますか?

Array.sort() はさまざまなブラウザ間で安定していますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 13:38:30259ブラウズ

Is Array.sort() stable across different browsers?

異なるブラウザ間での Array.sort() の安定性は何ですか?

Array.sort() メソッドの安定性。ソート後に等しい要素の順序が保持されるかどうかを決定します。ブラウザによって異なります:

ES2019 以降、ソート方法は安定している必要があります:

これは、配列内の等しい要素はソート後も相対的な順序を維持します。

ES2019 より前は、安定性はブラウザーに依存していました:

  • IE 6 : 安定版
  • Firefox < 3: 不安定
  • Firefox >= 3: 安定
  • Chrome 70:
  • 不安定
  • Chrome >= 70:
  • 安定
  • Opera
  • 10:
  • 不安定
  • オペラ >= 10:
  • 安定
  • Safari 4:
  • 安定
  • Edge:
512 要素を超える配列は不安定です

Chrome の一部のバージョンでは、配列サイズに基づいて安定したソートと不安定なソートが切り替わることに注意してください:

<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>
Chrome 70 より前では、エンジンは小さな配列には安定した並べ替えを使用し、大きな配列には不安定な並べ替えを使用していました。これは、次のテスト ケースを使用して検証できます:

このテストは、不安定な並べ替えを実装した以前のバージョンの Chrome およびその他のブラウザーでの不安定性を示します。

以上がArray.sort() はさまざまなブラウザ間で安定していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。