Atualmente, estou usando underscorejs para classificar minha classificação de json. Agora eu ter pedido para fazer um ascending
e descending
classificação usando underscore.js. Não vejo nada a respeito na documentação. Como posso conseguir isso?
javascript
underscore.js
Rahul
fonte
fonte
sortBy
função poderá ser,return -n
mas isso não funcionará para strings; daí a pergunta sobre que tipo de coisas você está classificando._.sortBy([1,4,3,2]).reverse()
ou_.chain([1,4,3,2]).sortBy().reverse().value()
se não quiser usar oreverse()
protótipo de Array.Respostas:
Você pode usar
.sortBy
, ele sempre retornará uma lista crescente :Mas você pode usar o método .reverse para fazê-lo descer :
Ou, ao lidar com números, adicione um sinal negativo ao retorno para descer a lista:
Sob o capô
.sortBy
usa o construído em.sort([handler])
:fonte
.sortBy()
chama-se built-inArray.sort()
, cujo algoritmo depende dos fornecedores de navegadores, mas é improvável que a escolha de bolhas seja a sua escolha._.sortBy(arr, function)
, presumo que ele faça um loop sobre cada item e execute alguma lógica para retornar a matriz classificada. Então, quando você chamaArray.prototype.reverse()
, provavelmente faz um loop sobre cada item novamente e executa alguma lógica para retornar a matriz invertida. Portanto, você está fazendo um loop na matriz duas vezes.A ordem decrescente usando sublinhado pode ser feita multiplicando o valor de retorno por -1.
Se você estiver classificando por seqüências de caracteres, não por números, poderá usar o método charCodeAt () para obter o valor unicode.
fonte
O método reverso do protótipo Array modifica a matriz e retorna uma referência a ela, o que significa que você pode fazer isso:
Além disso, a documentação sublinhada diz:
o que significa que você também pode usar
.reverse()
durante o encadeamento:fonte
_.sortBy(collection, item => item. propertyName.toLowerCase());
Semelhante à biblioteca de sublinhado, existe outra biblioteca chamada 'lodash' que possui um método "orderBy", que utiliza o parâmetro para determinar em qual ordem classificá-lo. Você pode usá-lo como
Por algum motivo, não está documentado nos documentos do site.
fonte
orderBy
, super útil! Muito melhor do que usar reverse, pois preserva a propriedade de classificação estável que estou procurando.Sublinhado Mixins
Estendendo-se à resposta de @ emil_lundberg, você também pode escrever um "mixin" se estiver usando o Underscore para criar uma função personalizada para classificação, se for um tipo de classificação que você poderá repetir em um aplicativo em algum lugar.
Por exemplo, talvez você tenha um controlador ou visualize os resultados da classificação com a ordem de classificação "ASC" ou "DESC" e deseje alternar entre essa classificação. Você pode fazer algo assim:
Mixin.js
Exemplo de uso
Aqui está um JSFiddle demonstrando isso: JSFiddle para SortBy Mixin
fonte