본문 바로가기
프로그래밍 언어/JS

JavaScript) 정렬 - sort()

by nomfang 2022. 4. 4.
728x90
반응형

sort()

자바스크립트는 콜백 함수로 비교 함수를 받을 수 있다

let arr = [5,3];

arr.sort(function(a, b){
    return a - b; // 오름 차순 
});

console.log(arr);    //[3, 5]
let arr = [5,3];

arr.sort(function(a, b){
    return b - a;  // 내림 차순
});

console.log(arr);    //[5, 3]

sort()의 콜백 함수

  • 생략 시 오름차순, ASCII 문자 순으로 정렬
  • 반환 값이 0보다 작다면 a를 b보다 앞에 배치
  • 반환 값이 0보다 크다면 b를 a보다 앞에 배치
  • 반환 값이 0이면 현재 자리 유지

object 정렬

object의 property를 참조하여 정렬할 수 있다

const obj = {
  title: "mart",
  product:[
    {name: "사과",
    price: 100},
    {name: "배",
    price: 200}
  ]
}
obj.product.sort((a,b)=> b.price - a.price);
console.log(obj);
/*
{
  title: 'mart',
  product: [ { name: '배', price: 200 }, { name: '사과', price: 100 } ]
}
*/

다중 조건 정렬

const arr = [[10, 1], [6, 3], [4, 5], [4, 3], [6, 5]];

// arr[0]이 같으면 arr[1] 기준으로 오름차순 정렬
arr.sort((a, b) => {
    if (a[0]===b[0]) return a[1]-b[1];
    else return a[0] - b[0];
})

console.log(arr); // [[4, 3], [4, 5], [6, 3], [6, 5], [10, 1]]
const arr = [
  {score: 30, num: 1},
  {score: 15, num: 2},
  {score: 10, num: 3},
  {score: 15, num: 4},
  {score: 10, num: 5},
];
arr.sort(function (a, b) {
  if (a.score > b.score) return 1;
  if (a.score < b.score) return -1;

  if (a.num > b.num) return 1;
  if (a.num < b.num) return -1;
});
console.log(arr3);

/*
[
  { score: 10, num: 3 },
  { score: 10, num: 5 },
  { score: 15, num: 2 },
  { score: 15, num: 4 },
  { score: 30, num: 1 }
]
*/
반응형

댓글