Quelle est la stabilité de Array.sort() sur différents navigateurs ?
La stabilité de la méthode Array.sort(), qui détermine si l'ordre des éléments égaux est conservé après le tri, varie selon les différents navigateurs :
Depuis ES2019, le La méthode de tri doit être stable :
Cela signifie que les éléments égaux dans le tableau conserveront leur ordre relatif après le tri.
Avant ES2019, la stabilité était assurée par le navigateur. à charge :
Notez que certaines versions de Chrome basculaient entre les tris stables et instables en fonction de la taille du tableau :
Avant Chrome 70, le moteur utilisait un tri stable pour les petits tableaux et un instable pour les grands tableaux. Cela peut être vérifié à l'aide du cas de test suivant :
<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>
Ce test démontrera l'instabilité dans les versions précédentes de Chrome et d'autres navigateurs qui implémentaient des tris instables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!