Sort 21.03.23


sort()

  • syntax sort의 파라미터 : compareFunction [선택 사항]
arr.sort([compareFunction])
  • compareFunction : 정렬 순서를 정의하는 함수. 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니 코드 코드 포인트 값에 따라 정렬.

  • 기본 정렬 순서 : 문자열의 유니코드 코드 포인트

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// ["Dec", "Feb", "Jan", "March"]

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// [1, 100000, 21, 30, 4]
  • 주의 : 복사본이 만들어지는 것이 아니라 원래 배열을 정렬한다.

compareFunction 제공

배열 요소는 compare 함수의 반환 값에 따라 정렬.

function compareFunc(a, b) {
    // 정렬 방법
}

arr.sort(compareFunc)
[compareFunction 특징]
  • 정렬 순서를 정의하는 함수.
  • 생략되면, 배열의 element들은 문자열로 취급되어, 유니코드 값 순서대로 정렬됩니다.
  • 이 함수는 두 개의 배열 element를 파라미터로 입력 받습니다.
  • 이 함수가 a, b 두개의 element를 파라미터로 입력받을 경우,
  • 이 함수가 리턴하는 값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬하고,
  • 이 함수가 리턴하는 값이 0보다 클 경우, b가 a보다 앞에 오도록 정렬합니다.
  • 만약 0을 리턴하면, a와 b의 순서를 변경하지 않습니다.
// 오름차순 정렬
unction compare(a, b) {
  if (a < b) {
    return -1;
  }
  if (a > b) {
    return 1;
  }
  // a = b
  return 0;
}
Number sort
  • 숫자 오름차순 정렬
const arr = [2, 1, 3, 10];

arr.sort(function(a, b)  {
  return a - b;
});

// 1,2,3,10
  • 숫자 내림차순 정렬
const arr = [2, 1, 3, 10];

arr.sort(function(a, b)  {
  return b - a;
});

// 10,3,2,1

String sort

  • 문자 오름차순 정렬 (대소문자 구분)
const arr = ['banana', 'b', 'Boy'];

arr.sort();
// Boy, b,banana

sort() 함수로 문자열을 정렬하면, 대문자가 소문자보다 앞에 오도록 정렬된다. (유니코드가 대문자가 소문자보다 앞서기 때문)

  • 문자 내림차순 정렬 (대소문자 구분)
const arr = ['banana', 'b', 'boy'];

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

// boy,banana,b
  • 문자 오름차순 정렬 (대소문자 구분 X)
const arr = ['banana', 'b', 'Boy'];

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;
});

// ['b', 'banana', 'Boy']
  • 문자 내림차순 정렬 (대소문자 구분 X)
const arr = ['banana', 'b', 'Boy'];

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;
});
// Boy,banana,b

object sort

  • 객체 오름차순 정렬
const arr = [
  {name: 'banana', price: 3000}, 
  {name: 'apple', price: 1000},
  {name: 'orange', price: 500}
];

arr.sort(function(a, b) {
  return a.price - b.price;
});

// {"name":"orange","price":500}
// {"name":"apple","price":1000}
// {"name":"banana","price":3000}
  • 객체 내림차순 정렬
const arr = [
  {name: 'banana', price: 3000}, 
  {name: 'apple', price: 1000},
  {name: 'orange', price: 500}
];

arr.sort(function(a, b) {
  return b.price - a.price;
});

// {"name":"banana","price":3000}
// {"name":"apple","price":1000}
// {"name":"orange","price":500}

출처: https://hianna.tistory.com/409 [어제 오늘 내일]




© 2020.11. by creamer

Powered by CREAMer