"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como realizar uma classificação estável em JavaScript para manter a consistência da ordem dos elementos?

Como realizar uma classificação estável em JavaScript para manter a consistência da ordem dos elementos?

Publicado em 2024-11-08
Navegar:998

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

Algoritmos de classificação estáveis ​​em JavaScript

Ao classificar dados, preservar a ordem original de elementos iguais é crucial para algoritmos de classificação estáveis. Neste contexto, pretendemos classificar uma matriz de objetos com uma chave específica em uma determinada ordem, mantendo a consistência da ordem dos elementos.

Técnica de classificação estável

Curiosamente, mesmo funções de classificação não estáveis ​​podem alcançar uma classificação estável. Ao capturar a posição inicial de cada elemento antes da classificação, podemos desempate na comparação da classificação usando a posição como critério secundário.

Implementação em 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);
};

Exemplo de uso

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

Esta técnica permite classificação estável em JavaScript, preservando a ordem original dos elementos com valores iguais.

Declaração de lançamento Este artigo foi reimpresso em: 1729255218 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3