[정리] 배열 정렬하기 (오름차순, 내림차순, 문자열, 객체)

권숙현·2023년 9월 11일

Javascript's Adventure

목록 보기
10/10

📖 sort함수를 이용한 배열 정리하기

1. sort()함수

배열을 정리하기 위해서 sort()함수를 사용

arr.sort([compareFunction])

[compareFunction]

: 정렬 순서를 정의하는 함수로 배열 요소는 compare 함수의 반환 값에 따라 정렬
: 만약 이 값이 생략되면, 문자열의 유니코드 순서대로 정렬된다.
MDN Array.prototype.sort() 부문 참고

이 함수가 a, b 두개의 element를 입력받아 이 함수가 리턴하는 값에 따라 정렬됨

  • comFun(a,b) < 0 인 경우 a, b순으로 정렬
  • comFun(a,b) > 0 인 경우 b, a순으로 정렬
  • comFun(a,b) = 0 인 경우 a, b를 변경하지 않음
function compare(a, b) {
  if(a < b) return -1;      // a b 순으로 정렬 
  if(a > b) return 1;       // b a 순으러 정렬
  if(a == b) return 0;      // 변동 없음 
}

[예제1] sort() 함수를 사용하여 오름차순으로 정렬한 예제

const arr1 = [2, 1, 3];
const arr2 = ['banana', 'apple', 'tomato']

arr1.sort();
document.write(arr1); // [1, 2, 3]
arr2.sort();
document.write(arr2); // ['apple', 'banana', 'tomato']

[예제2] sort() 함수를 사용하여 숫자 오름차순으로 정렬
compareFunction을 사용하지 않아, 유니코드 방식으로 정렬이 됨.
단, 원하는 방향성이 아님

const arr = [2, 1, 3, 10];

arr.sort();
document.write(arr);      // 결과 : 1, 10, 2 ,3 순서

2. sort() 함수로 숫자 정렬하기

[예제3] sort() 함수를 사용하여 숫자 오름차순 정렬
예제2에서 compareFunction을 사용한 경우

const arr = [2, 1, 3, 10];

arr.sort(function(a, b)  {
  if(a > b) return 1;
  if(a === b) return 0;
  if(a < b) return -1;
});
document.write(arr);     // 결과 : 1, 2, 3, 10 순서

arr.sort(function(a, b) {
  return a-b;            // 내림차순은 b-a;로 하면 됨
});                      // 두 숫자 차이로 단순화 할 수도 있음

3. sort() 함수로 문자열 정렬하기

: 문자열의 경우 파라미터가 입력되지 않으면 자동으로 유니코드 순으로 정렬해주기 때문에 오름차순은 따로 파라미터를 입력하지 않아도 됨.

[예제4] sort() 함수를 사용하여 문자 오름차순 정렬

const arr = ['apple', 'a', 'ade'];

arr.sort();
document.write(arr);

[예제5-1] sort() 함수를 사용하여 문자 내림차순 정렬

const arr = ['apple', 'a', 'ade'];

arr.sort(function(a, b) {
  if(a < b) return 1;
  if(a > b) return -1;
  if(a === b) return 0;
});
document.write(arr);

[예제5-2] sort() 함수를 사용하여 문자 내림차순 정렬

const arr = ['apple', 'a', 'ade'];

arr.sort().reverse();     // 오름차순 배열한 걸 reverse 한 것
document.write(arr);

4. sort()함수로 대소문자 구분없이 문자열 정렬하기

: 유니코드로 sort하면 대분자가 소문자보다 앞에 오도록 정렬이 됨
[예제6] sort() 함수를 사용하여 대소문자 구분 없이 문자 오름차순 정렬

const arr = ['apple', 'A', 'ade'];

arr.sort(function(a, b) {
  const upperCaseA = a.toUpperCase();
  const upperCaseB = b.toUpperCase();
  
  if(upperCaseA > upperCaseB) return 1;
  if(upperCaseA < upperCaseB) return -1;
  if(upperCaseA === upperCaseB) return 0;
});

document.write(arr);

MDN String.prototype.toUpperCase() 문서

5. sort() 함수로 객체 정렬하기

: 객체의 특정 값을 기준으로 정렬하는 방법
[예제7] sort() 함수를 객체 정렬하기
: 배열의 element가 객체일 때, 객체의 나이 순으로 오름차순 정렬

const arr = [
  {name: 'kate', age: 27}, 
  {name: 'mike', age: 33},
  {name: 'venus', age: 21}
];

arr.sort(function(a, b) {
  return a.age - b.age;
});
  
document.write(arr);
profile
sukki의 velog*^^*

0개의 댓글