value - vetor javascript




Classifique uma matriz de objeto por uma propriedade(com ordem personalizada, não alfabeticamente) (2)

Definir a prioridade personalizada primeiro

var codePriority = [ "GREEN", "BLUE", "RED" ];

Agora use o mesmo na classificação como

arr.sort( function(a,b){ 
   if ( a.code == b.code ) return a.value - b.value;
   return codePriority.indexOf( a.code ) - codePriority.indexOf( b.code ) ; notice this line
})

Demonstração

var arr = [
    { code: "RED", value: 0},
    { code: "BLUE", value: 0},
    { code: "RED", value: 0},
    { code: "GREEN", value: 0},
    { code: "BLUE", value: 0},
    { code: "RED", value: 0},
    { code: "GREEN", value: 0},
    { code: "BLUE", value: 0}
];
var codePriority = [ "GREEN", "BLUE", "RED" ];
arr.sort( function(a,b){ 
   if ( a.code == b.code ) return a.value - b.value;
   return codePriority.indexOf( a.code ) - codePriority.indexOf( b.code )
});
console.log( arr );

Eu gostaria de obter sua ajuda sobre este pequeno problema.

Eu tenho como encomendar este array, dependendo do valor do código, mas não em ordem alfabética. ( Eu especifiquei isso em negrito, mas acabei sendo sinalizado de qualquer maneira, as pessoas nem se importam em ler a pergunta )

Por exemplo, eu gostaria de ter todos os objetos verdes , depois todos os azuis e depois todos os vermelhos . Qual o melhor jeito pra fazer isso?

[
    { code: "RED", value: 0},
    { code: "BLUE", value: 0},
    { code: "RED", value: 0},
    { code: "GREEN", value: 0},
    { code: "BLUE", value: 0},
    { code: "RED", value: 0},
    { code: "GREEN", value: 0},
    { code: "BLUE", value: 0}
]

É possível fazer isso com a função de classificação ? Qual seria a condição nesse caso?


Você poderia implementar uma matriz de esquema e classificar de acordo com o índice do elemento dentro dessa matriz de esquema.

const a = ['GREEN', 'BLUE', 'RED'];

const o = [{code:"RED",value:0},{code:"BLUE",value:0},{code:"RED",value:0},{code:"GREEN",value:0},{code:"BLUE",value:0},{code:"RED",value:0},{code:"GREEN",value:0},{code:"BLUE",value:0}];

const r = o.slice().sort(({ code: q }, { code: w }) => a.indexOf(q) - a.indexOf(w));

console.log(r);





sorting