Há pouco tempo, um problema muito mágico entrou no código do meu colega. O processo aproximado é classificar uma matriz composta por objetos, onde o atributo a é usado para classificar, e o atributo b é uma condição preferida. Quando B é igual a 1, não importa qual seja o valor A, ele é classificado no início. Este é um problema muito simples. O problema é que ele usa a classificação duas vezes para implementar a classificação desta vez, primeiro a classificação de acordo com o atributo de A e depois a classificação de acordo com o valor de B. O problema está na segunda classificação.
Vamos tomar isso como certo que, na primeira classificação, a matriz foi classificada de grande a pequena de acordo com os atributos de a. Na segunda vez, apenas não precisamos mover a ordem da matriz original (geralmente escrita como retornando 0 ou -1 no método) e consideramos mencionar apenas elementos com B igual a 1 à frente. Mas, de fato, isso está relacionado ao algoritmo de classificação escolhido pelo idioma. O método de classificação interno de JavaScript (e outros idiomas juntos) usa uma coleção de vários algoritmos de classificação e, às vezes, não pode garantir que a posição dos mesmos elementos permaneça consistente.
Abaixo está um exemplo encontrado do Stackoverflow
A cópia do código é a seguinte:
var Arraytosort = [
{Nome: 'A', Força: 1}, {Nome: 'B', Força: 1}, {Nome: 'C', Força: 1}, {Nome: 'D', Força: 1},
{Nome: 'E', Força: 1}, {Nome: 'F', Força: 1}, {Nome: 'G', Força: 1}, {Nome: 'H', Força: 1},
{Nome: 'i', Força: 1}, {Nome: 'J', Força: 1}, {Nome: 'K', Força: 1}, {Nome: 'L', Força: 1},
{Nome: 'M', Força: 1}, {Nome: 'N', Força: 1}, {Nome: 'O', Força: 1}, {Nome: 'P', Força: 1},
{Nome: 'q', Força: 1}, {Nome: 'R', Força: 1}, {Nome: 'S', Força: 1}, {Nome: 'T', Força: 1}
];
Arraytosort.sort (função (a, b) {
retorno B. força - A. Strength;
});
Arraytosort.foreach (function (elemento) {
console.log (element.name);
});
Pensaríamos que o valor do último elemento ainda é de A a T, mas o resultado real está fora de ordem. Isso ocorre porque o algoritmo de classificação não mantém a ordem da matriz original, ou seja, instável.
Então devemos tentar evitar essa situação. No exemplo do meu colega, a fusão da lógica de dois tipos de um deve ser uma maneira viável. Se ele deve ser dividido em vários tipos, a ordem da matriz original será registrada nos atributos dos elementos.