"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-08
Parcourir:730

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

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);
};

Exemple d'utilisation

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

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

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729255218. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3