sort()
오름차순으로 문자열 이나 숫자를 정렬해주는 메소드이다.
하지만 숫자 25와 100을비교하는데 첫숫자 25가 더 크므로 25를 앞으로 정렬하는 에러가 나타난다.
그러므로 비교기능을 써준다!
비교기능
sort(function(a, b){return b-a})
간단한 예제
배열 요소가 간단할때
var list = [
{'name': '마우스', "price": 17000},
{'name': '마우스', "price": 15000},
{'name': '키보드', "price": 10000},
{'name': '모니터', "price": 300000}
];
var sortOrder = ['name', 'price'];
list.sort(function(a,b){
for(var i = 0, length = sortOrder.length; i < length; i++){
if(a[sortOrder[i]] > b[sortOrder[i]]){ // a가 앞으로 정렬
return 1 ;
}
else if(a[sortOrder[i]] < b[sortOrder[i]]){ // b가 앞으로 정렬
return -1;
}
// else{
// //return 0; // a,b 가 같다. 블록 스코프의 영역을 생각하고 코드를 효율적으로 기입해보자!!!
// }
}
return 0;
});
console.log(list);
배열요소가 json형태일때
// 들여쓰기(indent) 습관화
// 연산자 주위 공백 습관화
// 불필요한 코드 빠른 페이지 로드를 위해 쓰지 않기 이렇게 해주는 이유는 리소스 크기를 줄여 페이지 렌딩 속도를 높일 수 있다.
var list = [
{'name': '마우스', "price": 10000, "QTY" : 100, "made_date" : "2023-01-04", "output" : 10},
{'name': '마우스', "price": 10000, "QTY" : 200, "made_date" : "2023-01-02", "output" : 20},
{'name': '키보드', "price": 10000, "QTY" : 200, "made_date" : "2023-01-01", "output" : 30},
{'name': '모니터', "price": 150000, "QTY" : 300, "made_date" : "2023-01-03", "output" : 40},
{'name': '스피커', "price": 150000, "QTY" : 300, "made_date" : "2023-01-05", "output" : 50},
{'name': '스피커', "price": 150000, "QTY" : 300, "made_date" : "2023-01-05", "output" : 60}
];
var sortOrder = [{'field':'price', 'order': 'asc'}, {'field':'name', 'order': 'desc'},
{'field':'QTY', 'order': 'desc'}, {'field':'made_date', 'order': 'asc'},
{'field':'output', 'order': 'desc'}];
list.sort(function (a, b) {
for (var i = 0, length = sortOrder.length; i < length; i++) {
/* for문을 이용해 선언부, 조건부, 증감부를 효율적으로 활용하면 좋다.
선언부를 통해 변수선언을 한꺼번에 하면 효율적 코드이다.
조건 , 증감부 부분을 좀 더 효율적으로 선언하면 효율적인 코드를 기입할 수 있다.
*/
var order = (sortOrder[i].order === "asc") ? 1 : -1;
/*
삼항연산자를 이용하여 참일때는 1 , 거짓일때는 -1을 order 변수에 대입해
* 연산자를 사용 => 1, -1로 오름차순 내림차순을 정의한다.
밑 예제 order 없이 생각한다면 오름차순 로직이지만
-1을 곱하는 순간 내림차순 로직으로 된다.
*/
if (a[sortOrder[i].field] > b[sortOrder[i].field]) {
/*
object 객체 속성을 이용한 값 추출
object.nameproperty로 속성값을 추출할 수 있고
object[nameproperty]로 속성값 추출이 가능하다.
*/
return 1 * order;
}
else if (a[sortOrder[i].field] < b[sortOrder[i].field]) {
return -1 * order;
}
}
return 0; //같다면 정렬을 똑같이 두고 다음 필드값으로 정렬을 한다.
});
console.log(list);
주석을 잘 살펴보면서
코드의 효율적 기입도 생각하며 코드를 짜자!
'위너 > 교육' 카테고리의 다른 글
js교육 230109 (0) | 2023.01.09 |
---|---|
주석의 중요성 230105 (0) | 2023.01.05 |
배열 메소드 splice() 실습 예제 230105 (0) | 2023.01.05 |
배열 iterate for문으로 바꿔보기 230105 (0) | 2023.01.05 |
html, js가 중요한 이유 230104 교육 (0) | 2023.01.04 |