본문 바로가기
자바스크립트(javascript)

[Javascript]배열 정렬 함수 sort(오름차순, 내림차순, 문자열 정렬, 숫자 정렬, 객체 정렬)

by 지 요니 2023. 4. 8.

1. sort() 함수

배열의 요소를 정렬한 후에 그 배열을 반환하는 함수(기본적으론 오름차순으로 정렬됨! ASCII 문자 순서대로)

arr.sort([compareFunction])

* compareFunction이 생략될 경우 , 배열의 요소들은 모두 문자열 취급되며, 유니코드 값 순서대로 정렬된다!

더보기

🍀 compareFunction : 정렬 순서를 정의하는 함수

  • 이 함수는 두 개의 배열 요소를 파라미터로 입력 받음.
  • 함수가 두 개의 배열 요소(a, b)로 입력 받을 경우
    •  a > b => return 1        // return value>0이므로 a는 b 뒤에 위치
    • a < b => return -1       // return value<0이므로 a는 b 앞에 위치
    • a = b => return 0        // a와 b의 순서 변함 없음

2. 문자 정렬

1) 문자열 오름차순 정렬 => 기본 문법 이용

let arr = ["a", "d", "z", "p", "j", "c", "k", "s"];
arr.sort();
console.log(arr);	//['a', 'c', 'd','j', 'k', 'p','s', 'z']

2) 문자열 내림차순 정렬 => 비교 연산자(<, >) 이용

var strArray = ["BA", "BB", "AA", "AB", "CB", "CA"];

strArray.sort(function compare(a, b) {
  if (a > b) return -1;
  if (a < b) return 1;
  return 0;
});

console.log(strArray); // ["CB","CA","BB","BA","AB","AA"]

3. 숫자 정렬

1) 한자리 수 정렬

let arr1 = [1, 4, 6, 8, 5, 3, 7];
arr1.sort();
console.log(arr1); 	// [1, 3, 4, 5, 6, 7, 8]

2) compareFunction생략한 채로 정렬 => 오류 발생

let arr2 = [74, 1, 8, 54, 23];
arr2.sort();
console.log(arr2); //[ 1, 23, 54, 74, 8 ] => 오류 발생

sort()함수는 정렬할 때 배열의 요소들을 문자열로 취급 => 숫자 정렬시 값을 비교해줄 수 있는 함수 넣어줘야함!!

 

3) 숫자 정렬(오름차순) => a-b

let arr3 = [13, 46, 52, 36, 75, 3];
arr3.sort(function (a, b) {
  return a - b;
});
// arr3.sort((a, b) => a - b);  //화살표 함수 이용
console.log(arr3); //[ 3, 13, 36, 46, 52, 75 ]

a, b 에 두 요소 전달해서 a-b로 크기를 비교한 후에

a>b이면 양수, a-b이면 음수를 리턴하여, 주어진 배열을 오름차순 정렬함.

 

4) 숫자 정렬(내림차순) => b-a

let arr3 = [13, 46, 52, 36, 75, 3];

arr3.sort(function (a, b) {
  return b - a;
});
console.log(arr3); //[ 75, 52, 46, 36, 13, 3 ]

오름차순과 반대로 b-a를 해주면 내림차순으로 정렬됨을 볼 수 있다.

 

4. 2차원 배열 정렬

: 정렬 방식은 동일, 정렬 기준으로 삼고자 하는 배열 요소(인덱스로 구분)를 기준으로 비교 함수 작성해야함!

const arr5 = [
  [10, 2],
  [7, 8],
  [3, 3],
  [-1, 3],
  [99, 99],
  [-10, 10],
];

arr5.sort((prev, cur) => {
  // 2번째 배열 요소를 기준으로 오름차순
  if (prev[1] > cur[1]) return 1;
  if (prev[1] < cur[1]) return -1;
});
console.log(arr5); //[ [ 10, 2 ], [ 3, 3 ], [ -1, 3 ], [ 7, 8 ], [ -10, 10 ], [ 99, 99 ] ]


const arr6 = [
  [2, 9, 2],
  [-1, -2, -3],
  [0, 3, 3],
  [12, -1, 6],
  [9, 10, 11],
  [-1, -1, -1],
  [1, 0, -5],
];

arr6.sort((prev, cur) => {
  // 3번째 배열 요소를 기준으로 내림차순
  if (prev[2] < cur[2]) return 1;
  if (prev[2] > cur[2]) return -1;
});
console.log(arr6);
//[[ 9, 10, 11 ],
//  [ 12, -1, 6 ],
//  [ 0, 3, 3 ],
//  [ 2, 9, 2 ],
//  [ -1, -1, -1 ],
//  [ -1, -2, -3 ],
//  [ 1, 0, -5 ]
//]

 

5. 객체 정렬

객체 속성을 기준으로 객체 정렬

var employees = [
  { name: "홍길동", salary: 30000 },
  { name: "김길동", salary: 10000 },
  { name: "마이콜", salary: 20000 },
];

employees.sort(function compare(a, b) {
  return a.salary - b.salary;
});

console.log(employees); 
//[{ name: '김길동', salary: 10000 },{ name: '마이콜', salary: 20000 },{ name: '홍길동', salary: 30000 }]

 

댓글