Maison >interface Web >js tutoriel >Comment effectuer un tri stable en JavaScript pour maintenir la cohérence de l'ordre des éléments ?

Comment effectuer un tri stable en JavaScript pour maintenir la cohérence de l'ordre des éléments ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-18 20:42:03628parcourir

How to Perform Stable Sorting in JavaScript to Maintain Element Order Consistency?

Algorithmes de tri stables en JavaScript

Lors du tri de données, la préservation de l'ordre d'origine des éléments égaux est cruciale pour les algorithmes de tri stables. Dans ce contexte, nous visons à trier un tableau d'objets avec une clé spécifique dans un ordre donné tout en maintenant la cohérence de l'ordre des éléments.

Technique de tri stable

Fait intéressant, même les fonctions de tri non stables peuvent réaliser un tri stable. En capturant la position initiale de chaque élément avant le tri, nous pouvons rompre les liens dans la comparaison de tri en utilisant la position comme critère secondaire.

Implémentation en JavaScript

<code class="javascript">const sortBy = (arr, key, order) => {
  // Capture element positions
  const positions = arr.map((item, i) => {
    return { item, position: i };
  });

  // Perform sorting
  positions.sort((a, b) => {
    let cmp = a.item[key].localeCompare(b.item[key]);
    if (cmp === 0) {
      // Tiebreaker: sort by position
      cmp = a.position - b.position;
    }
    if (order === "desc") {
      return cmp * -1;
    } else {
      return cmp;
    }
  });

  // Return sorted objects
  return positions.map(position => position.item);
};</code>

Exemple d'utilisation

<code class="javascript">const data = [
  { name: "Alice", age: 25 },
  { name: "Bob", age: 30 },
  { name: "Eve", age: 25 },
];

const sortedAscending = sortBy(data, "age", "asc");
console.log(sortedAscending); // [{ name: "Alice", age: 25 }, { name: "Eve", age: 25 }, { name: "Bob", age: 30 }]

const sortedDescending = sortBy(data, "age", "desc");
console.log(sortedDescending); // [{ name: "Bob", age: 30 }, { name: "Eve", age: 25 }, { name: "Alice", age: 25 }]</code>

Cette technique permet un tri stable en JavaScript, en préservant l'ordre d'origine des éléments de valeurs égales.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn