몇 가지 오브젝트 배열이 있다고 가정합니다.
var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];
이 배열을 현재 날짜와 가장 가까운 날짜부터 순서대로 정렬하려면 어떻게 해야 합니까?어레이에 객체가 많을 수 있지만 단순성을 위해 2를 사용했습니다.
정렬 기능과 커스텀 컴퍼레이터를 사용할 수 있습니까?
질문에 대한 답변
가장 간단한 답변
array.sort(function(a,b){
// Turn your strings into dates, and then subtract them
// to get a value that is either negative, positive, or zero.
return new Date(b.date) - new Date(a.date); });
기타 일반적인 답변
array.sort(function(o1,o2){
if (sort_o1_before_o2)
return -1;
else if(sort_o1_after_o2) return
1;
else
return
0; });
또는 보다 간결하게:
array.sort(function(o1,o2){
return sort_o1_before_o2 ? -1 : sort_o1_after_o2 ? 1 : 0; });
범용적이고 강력한 답변
커스텀 비엔카블을 정의합니다.sortBy
모든 어레이에서 Schwartzian 변환을 사용하여 기능을 수행합니다.
(function(){
if (typeof Object.defineProperty === 'function'){
try{Object.defineProperty(Array.prototype,'sortBy',{value:sb}); }catch(e){}
}
if (!Array.prototype.sortBy) Array.prototype.sortBy = sb;
function sb(f){
for (var i=this.length;i;){
var o = this[--i];
this[i] = [].concat(f.call(o,o,i),o);
}
this.sort(function(a,b){
for (var i=0,len=a.length;i<len;++i){
if (a[i]!=b[i]) return a[i]<b[i]?-1:1;
}
return 0;
});
for (var i=this.length;i;){
this[--i]=this[i][this[i].length-1];
}
return this;
} })();
다음과 같이 사용합니다.
array.sortBy(function(o){ return o.date });
날짜를 직접 비교할 수 없는 경우 비교 가능한 날짜를 만듭니다.
array.sortBy(function(o){ return new Date( o.date ) });
값 배열을 반환하는 경우 이를 사용하여 여러 기준에 따라 정렬할 수도 있습니다.
// Sort by date, then score (reversed), then name array.sortBy(function(o){ return [ o.date, -o.score, o.name ] };
상세한 것에 대하여는, http://phrogz.net/JS/Array.prototype.sortBy.js 를 참조해 주세요.
@Phrogz의 답변은 둘 다 훌륭하지만, 여기 더 훌륭하고 간결한 답변이 있습니다.
array.sort(function(a,b){return a.getTime() - b.getTime()});
화살표 기능 사용 방법
array.sort((a,b)=>a.getTime()-b.getTime());
JSON을 수정하면 다음과 같은 작업이 가능합니다.
var array = [{id: 1, date:'Mar 12 2012 10:00:00 AM'}, {id: 2, date:'Mar 8 2012 08:00:00 AM'}];
array.sort(function(a, b) {
var c = new Date(a.date);
var d = new Date(b.date);
return c-d; });
데이터를 수정해야 합니다.
var array = [{id: 1, date: "Mar 12 2012 10:00:00 AM"},{id: 2, date: "Mar 28 2012 08:00:00 AM"}];
데이터를 수정한 후 다음 코드를 사용할 수 있습니다.
function sortFunction(a,b){
var dateA = new Date(a.date).getTime();
var dateB = new Date(b.date).getTime();
return dateA > dateB ? 1 : -1;
};
var array = [{id: 1, date: "Mar 12 2012 10:00:00 AM"},{id: 2, date: "Mar 28 2012 08:00:00 AM"}]; array.sort(sortFunction);
위의 답변은 모두 양호합니다 😊, ES6 방식의 정렬 날짜 구현입니다. 사용 중입니다.Date.parse
(글로벌 Date 오브젝트) Date 문자열 표현을 밀리초로 변환합니다.인스턴스화하지 않고new Date
매번 반대합니다.
var array = ["2021-08-10T07:24:30.087+0000" , "2021-09-30T07:24:30.087+0000", "2021-10-13T07:24:30.087+0000"];
// sorting with latest date array.sort((a,b) => Date.parse(b) - Date.parse(a))