JavaScript - sort (배열의 정렬)

isk·2022년 11월 6일

JavaScript

목록 보기
25/39

sort()는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환한다. (기존 배열을 바꾼다)
기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따른다.
만약, [1, 2, 10, 3]이라는 배열이 있다면, [1, 2, 3, 10]으로 반환해줄 것 같지만 [1, 10, 2, 3]으로 반환해준다.
그렇기 때문에 sort()의 괄호안에 함수를 넣어줘야한다.

구문 : 배열.sort((a, b) => a -b)

아래는 compareFunction를 넣지 않은 코드

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

console.log(months);

// expected output: Array ["Dec", "Feb", "Jan", "March"]



const array1 = [1, 30, 4, 21, 100000];
array1.sort();

console.log(array1);

// expected output: Array [1, 100000, 21, 30, 4]

아래는 compareFunction를 넣은 코드

let numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // a, b 위치에 따라 내림차순 오름차순이 바뀐다.

console.log(numbers); // [1, 2, 3, 4, 5]



let numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => b - a); // a, b 위치에 따라 내림차순 오름차순이 바뀐다.

console.log(numbers); // [5, 4, 3, 2, 1]

배열의 각 요소들을 a, b에 넣어 계산한 값이 음수면 a가 앞, b가 뒤로 오도록 정렬하고,
배열의 각 요소들을 a, b에 넣어 계산한 값이 양수면 b가 앞, a가 뒤로 오도록 한다.
배열의 각 요소들을 a, b에 넣어 계산한 값이 0이라면 a와 b의 순서를 변경하지 않는다.
완료될 때까지 반복한다.

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

// value 기준으로 정렬
items.sort(function (a, b) {
  if (a.value > b.value) {
    return 1;
  }
  if (a.value < b.value) {
    return -1;
  }
  // a must be equal to b
  return 0;
});

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

  // 이름이 같을 경우
  return 0;
});

mdn의 예시인데, key value로 이루어져 있을 경우 기준을 정해서 정렬할 수도 있다.

0개의 댓글