Digamos que eu tenha uma matriz de alguns objetos:
var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];
Como posso classificar essa matriz pelo elemento date em ordem a partir da data mais próxima da data e hora atuais? Lembre-se de que a matriz pode ter muitos objetos, mas por uma questão de simplicidade, usei 2.
Eu usaria a função de classificação e um comparador personalizado?
ATUALIZAR:
No meu caso específico, eu queria as datas organizadas da mais recente à mais antiga. Acabei que tive que reverter a lógica da função simples da seguinte maneira:
array.sort(function(a, b) {
a = new Date(a.dateModified);
b = new Date(b.dateModified);
return a>b ? -1 : a<b ? 1 : 0;
});
Isso classifica as datas das mais recentes.
javascript
datetime
ryandlf
fonte
fonte
Respostas:
Resposta mais simples
Resposta mais genérica
Ou mais sucintamente:
Resposta poderosa e genérica
Defina uma
sortBy
função não enumerável personalizada usando uma transformação Schwartzian em todas as matrizes:Use-o assim:
Se a sua data não for diretamente comparável, faça uma data comparável, por exemplo,
Você também pode usar isso para classificar por vários critérios se retornar uma matriz de valores:
Consulte http://phrogz.net/JS/Array.prototype.sortBy.js para obter mais detalhes.
fonte
return b-a;
na resposta simples?As respostas do @Phrogz são ótimas, mas aqui está uma resposta ótima e mais concisa:
Usando o modo de seta
Encontre aqui: Classificar data em Javascript
fonte
a - b
também funcionaria. Então,array.sort((a, b) => a - b)
(ES6)Depois de corrigir o JSON, isso deve funcionar para você agora:
fonte
Seus dados precisam de algumas correções:
Depois de corrigir os dados, você pode usar este pedaço de código:
fonte
0
onde for necessário!Eu recomendo o GitHub: Array sortBy - uma melhor implementação de
sortBy
método que usa a transformação SchwartzianaMas, por enquanto, vamos tentar essa abordagem Gist: sortBy-old.js .
Vamos criar um método para classificar matrizes capazes de organizar objetos por alguma propriedade.
Criando a função de classificação
Configurando dados não classificados
Usando isso
Por fim, organizamos a matriz, por
"date"
propriedade comostring
Se você deseja ignorar letras maiúsculas, defina o
"parser"
retorno de chamada:Se você deseja tratar o campo "data" como
Date
tipo:Aqui você pode jogar com o exemplo acima:
jsbin.com/lesebi
fonte
Isso deve ocorrer quando a data estiver neste formato (dd / mm / aaaa).
Então ligue
sortByDate(myArr);
fonte
Você pode usar sortBy no sublinhado js.
http://underscorejs.org/#sortBy
Amostra:
fonte
Vou adicionar isso aqui, pois alguns usos podem não ser capazes de descobrir como inverter esse método de classificação.
Para classificar por 'chegando', podemos simplesmente trocar a & b, assim:
Observe que
a
agora está no lado esquerdo eb
no lado direito: D!fonte
Eu pessoalmente uso a seguinte abordagem para classificar datas.
fonte
Consegui realizar a classificação usando as linhas abaixo:
fonte
fonte
Para quem deseja classificar por data (formato do Reino Unido), usei o seguinte:
fonte
Acabei de pegar a transformação schwartziana descrita acima e a fiz como função. É preciso um
array
, a classificaçãofunction
e um booleano como entrada:fonte
Obrigado Ganesh Sanap. classificando itens por campo de data do antigo para o novo. Use-o
fonte
Se, como eu, você tem uma matriz com datas formatadas como
YYYY[-MM[-DD]]
onde você gostaria de solicitar datas mais específicas antes de datas menos específicas, criei esta útil função:fonte
fonte