[Q] arr.sort([compareFunction])

SSO·2020년 1월 7일
0

Javascript & TypeScript

목록 보기
1/4

정렬

1.arr.sort([compareFunction])에서 compareFunction(a,b)은 정렬순서를 정의하는 함수. 주어지지 않을 경우에는 입력값들이 모두 string으로 변환되어 유니코드 표준으로 정렬(오름차순).
2.compareFunction(a, b)반환값이 0보다 작으면, a의 index가 b보다 작다.
반환값이 0보다 크면, b의 index가 a보다 작다.
3.number 비교를 위해서는 array.sort((a,b) => a-b)로 오름차순 정렬 가능.
(a-b가 0보다 작은 값을 반환하는 경우는 오름차순을 의미)
4.내림차순은 오름차순의 return값만 반대로 지정하면 됨.
   a < b 일 때 0보다 작은 값 return => 오름차순
   a > b 일 때 0보다 작은 값 return => 내림차순

예시

  1. 기본 정렬: arr.sort()
const fruit = ['orange', 'apple', 'banana'];

/* 기본 정렬 */
fruit.sort(); // apple, banana, orange
  1. 역방향 정렬: arr.reverse()
    : reverse() method는 배열의 순서를 반전시킴.
const array1 = ['one', 'two', 'three'];
const reversed = array1.reverse();
console.log('reversed:', reversed);
// expected output: "reversed:" Array ["three", "two", "one"]
  1. 숫자 정렬: compareFunction 필수
const score = [4, 11, 2, 10, 3, 1]; 

/* 오류 */
score.sort(); // 1, 10, 11, 2, 3, 4 
              // ASCII 문자 순서로 정렬되어 숫자의 크기대로 나오지 않음

/* 정상 동작 */
score.sort(function(a, b) { // 오름차순
    return a - b;
    // 1, 2, 3, 4, 10, 11
});

score.sort(function(a, b) { // 내림차순
    return b - a;
    // 11, 10, 4, 3, 2, 1
});
  1. CompareFunction 예시
var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 }
];

// sort by value
items.sort(function (a, b) {
  return a.value - b.value;
});

// sort by name
//오름차순
items.sort(function(a, b) { //오름차순
  var nameA = a.name.toUpperCase(); // ignore upper and lowercase
  var nameB = b.name.toUpperCase(); // ignore upper and lowercase
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }
  
  // 내림차순
 items.sort(function(a, b) { 
  var nameA = a.name.toUpperCase(); // ignore upper and lowercase
  var nameB = b.name.toUpperCase(); // ignore upper and lowercase
  if (nameA < nameB) {
    return 1;
  }
  if (nameA > nameB) {
    return -1;
  }

  // names must be equal
  return 0;
});

#참고: 1) sort MDN 2) 관련포스트*

profile
happy

0개의 댓글