JavaScript
[javascript] 목록 엘리먼트에 오름차순/내림차순 정렬 기능 넣기(with sort 함수)
dev.mk
2022. 7. 2. 23:03
반응형
중요 포인트는
1. 배열을 자바스크립트 sort메소드로 정렬한다.
2. 제이쿼리로 엘리먼트를 그린다.
데이터의 형태
let dummy = [
{'dt' : "2022-01-04", 'team' : 'C'}
, {'dt' : "2022-03-04", 'team' : 'B'}
, {'dt' : "2022-02-01", 'team' : 'C'}
, {'dt' : "2022-04-04", 'team' : 'D'}
, {'dt' : "2022-01-04", 'team' : 'A'}
, {'dt' : "2022-05-04", 'team' : 'A'}
, {'dt' : "2022-06-04", 'team' : 'D'}
, {'dt' : "2022-07-02", 'team' : 'C'}
]
처음 디폴트 목록
오름차순 정렬
내림차순 정렬
전체소스
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>자바스립트 공부</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<style>
ul.mylist, ol.mylist {
list-style: none;
margin: 0px;
padding: 0px;
max-width: 250px;
width: 100%;
}
ul.mylist li, ol.mylist li {
padding: 5px 0px 5px 5px;
margin-bottom: 5px;
border-bottom: 1px solid #efefef;
font-size: 12px;
}
ul.mylist li:last-child,
ol.mylist li:last-child {
border-bottom: 0px;
}
ul.mylist li:before,
ol.mylist li:before {
content: ">";
display: inline-block;
vertical-align: middle;
padding: 0px 5px 6px 0px;
}
</style>
</head>
<body>
<button onclick="javascript:fn_create_list('asc');">오름차순 정렬하기</button>
<button onclick="javascript:fn_create_list('desc');">내림차순 정렬하기</button>
<ul class="mylist"></ul>
<script>
//임의로 만든 배열 객체
let dummy = [
{'dt' : "2022-01-04", 'team' : 'C'}
, {'dt' : "2022-03-04", 'team' : 'B'}
, {'dt' : "2022-02-01", 'team' : 'C'}
, {'dt' : "2022-04-04", 'team' : 'D'}
, {'dt' : "2022-01-04", 'team' : 'A'}
, {'dt' : "2022-05-04", 'team' : 'A'}
, {'dt' : "2022-06-04", 'team' : 'D'}
, {'dt' : "2022-07-02", 'team' : 'C'}
]
//최초 생성
fn_create_list();
/*********************************
* @desc 오름차순으로 정렬하는 함수
*/
function fn_date_ascending(a, b) {
var dateA = new Date(a['dt']).getTime();
var dateB = new Date(b['dt']).getTime();
return dateA > dateB ? 1 : -1;
};
/*********************************
* @desc 내림차순으로 정렬하는 함수
*/
function fn_date_descending(a, b) {
var dateA = new Date(a['dt']).getTime();
var dateB = new Date(b['dt']).getTime();
return dateA < dateB ? 1 : -1;
};
/*********************************
* @desc 목록을 그리는 함수
*/
function fn_create_list(type){
//초기화
$('.mylist').empty();
//타입 변수가 없으면 기본 배열로 목록 생성
if( type == "" || type == null){
dummy.forEach(function(v,i){
$(".mylist").append("<li>"+v.dt+"</li>");
});
//내림차순일때
}else if( type == "desc"){
dummy.sort(fn_date_descending).forEach(function(v,i){
$(".mylist").append("<li>"+v.dt+"</li>");
});
//오름차순일때
}else{
dummy.sort(fn_date_ascending).forEach(function(v,i){
$(".mylist").append("<li>"+v.dt+"</li>");
});
}
}
</script>
</body>
</html>
반응형