[JS] sort()로 이중배열 정렬하기

제이제이·2022년 8월 19일
3
post-thumbnail

sort()

  • sort()는 문자(String)인 숫자를 넣으면 유니코드 기준으로 정렬된다. 이 경우 가장 앞 문자인 "1"과 "2"를 비교하므로 "12"는 "2"보다 작다. 숫자로 비교하고 싶다면 숫자로 변환하여 비교한다.
  • sort()의 괄호 안에 비교 방식을 구하는 함수를 넣어서 원하는 순서를 얻을 수 있다.
  • 비교 방식을 구하는 함수에서 반환하는 값에 따라 - 0일 경우 비교하는 a와 b의 값은 동일, 음수일 경우 a가 b보다 작음, 양수일 경우 a가 b보다 큼 - 순서가 정해진다. 비교 함수에 값을 비교하는 방식을 직접 지정해서 0, 음수, 양수 중 하나를 반환하게 하는 방법으로 순서를 정할 수도 있다.
// a에서 b를 빼는 형태로 간단하게 오름차순을 구할 수 있다. 
// 내림차순을 구하고 싶다면 b에서 a를 뺀다. (b - a)

// 별도 함수를 만들어서 넣기
function compareNumbers(a, b) {
  return a - b;
}

numberArray.sort(compareNumbers);

// sort 안에서 화살표 함수로 구현하기
numberArray.sort((a,b) => a-b);

이중 배열 안 배열의 원하는 위치 값으로 정렬하기

  • 정렬할 배열 안에 배열이 있다면 배열 안 값 중 원하는 위치의 값을 가지고 정렬이 가능하다.
  • Map으로 필요한 데이터를 key,value 형태로 만든 후 배열로 변환해서 key 혹은 value의 값을 기준으로 정렬할 수 있다.
const myMap = new Map();

// myMap에 값을 set하는 부분 생략

const arrayFromMap = [...myMap].sort((a, b) => a[1] - b[1]);

  • 배열 안에 객체가 있다면 위와 동일한 방식으로 객체의 value를 비교하여 정렬할 수 있다.
const animalArray = [
  { type: cat, count: 5 },
  { type: dog, count: 2 },
  { type: cow, count: 1 },
  { type: goat, count: 3 }
]

// 동물 종류의 이름 순으로 정렬
const sortedTypeArray = animalArray.sort((a,b) => a.type - b.type);

// 동물 마리 수로 정렬
const sortedCountArray = animalArray.sort((a,b) => a.count - b.count);

참고문서

Array.prototype.sort() - MDN

profile
그날그날의 최선을 다하기💪 피드백은 언제나 환영입니다!

0개의 댓글