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