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

+ Recent posts