gurwhddl
코알못 공부블로그
gurwhddl
전체 방문자
오늘
어제
  • 분류 전체보기
    • CSS
    • JS
    • node.JS
    • REACT
    • 코딩테스트 연습

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gurwhddl

코알못 공부블로그

Js sort 메서드
node.JS

Js sort 메서드

2023. 3. 7. 00:20

[6,10,2] 이런 배열에서 자리만 바꿔서 만들 수 있는 최댓값 만드는 문제 보고 이거 sort로 풀면 되지 않나? 해서 찾아본것

정답은

numbers.sort((a,b) =>

         {
              return String(a)+Number(b) >String(b) + Number(a)
          })

(정답보니까 ''+a+b 해도 똑같던데 뭔가 이해가 안가는 코드라서 그냥 무식하게 저렇게 씀)

 

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다 - by MDN

       arr.sort([compareFunction])

 

  • 여기에서 알 수 있듯이 그냥 .sort만 써도 됨 - 그렇게 되면 문자열의 유니코드대로 배열을 바꾼다음 그 배열을 반환해줌
  • sort는 원 배열을 바꿔버림(복사본 아님)
  • sort는 기본적으로 배열 요소를 String으로 취급함 - 이래서 따로 리턴값 안정해주면 앞자리만 보고 정렬해줌
  • 단순히 a,b => a - b / b - a 이런것만 가능한 게 아니라 특정 조건값에 따른 리턴값을 지정해줘서도 사용 가능함

compareFunction이 제공되면 배열 요소는 compare 함수의 반환 값에 따라 정렬됩니다. a와 b가 비교되는 두 요소라면,

  • compareFunction(a, b)이 0보다 작은 경우 a를 b보다 낮은 색인으로 정렬합니다. 즉, a가 먼저옵니다.
  • compareFunction(a, b)이 0을 반환하면 a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬합니다. 참고 : ECMAscript 표준은 이러한 동작을 보장하지 않으므로 모든 브라우저(예 : Mozilla 버전은 적어도 2003 년 이후 버전 임)가 이를 존중하지는 않습니다.
  • compareFunction(a, b)이 0보다 큰 경우, b를 a보다 낮은 인덱스로 소트합니다.
  • compareFunction(a, b)은 요소 a와 b의 특정 쌍이 두 개의 인수로 주어질 때 항상 동일한 값을 반환해야합니다. 일치하지 않는 결과가 반환되면 정렬 순서는 정의되지 않습니다.

arr = [4,2,1,6]

여기서 알아야될 것이 a,b가 index 0 1 이렇게 가는게 아니라 반대라고 생각하면 됨

arr.sort((그다음,현재)) 라고 생각하면 됨

저게 어떤 방식으로 계산이 이루어지나 찾아봤더니 굉~장히 복잡한 알고리즘으로 계산이 된다고 해서 세세하게 분석하는건 좀 무의미한거 같음..

 

보통 많이 쓰는게 arr.sort((a,b) => a-b or b-a)인데 

예시의 경우 처음에   a = 2 b = 4 라는 값이 들어왔음 - 결과는 a- b<0이기 때문에 4와 2의 순서가 바뀌게 됨 

배열은 [2,4,1,6]이 되었고 그 다음으로 a = 1 / b = 2 라는 값이 들어오게 되고 결과는 <0 - 순서가 또 바뀜

배열은 [1,4,2,6]이 되었고 그 다음으로 a = 6 / b = 1 비교했더니 이번엔 >0 - 아무것도 안바뀜

 

이런 원리때문에 a-b면 작은 값이 앞으로 올테니 오름차순이 되는거고

b-a면 큰 값이 앞에 올테니 내림차순이 됨

 

 

 

여기서 기억해야 될 점은 >0이면 안바뀌고 <0이면 바뀐다는 거

return 1이면 안바뀜 / -1이면 바뀜 이런식으로 세세하게도 가능
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;
});

 

 

 

'node.JS' 카테고리의 다른 글

puppeteer 라이브러리 - dialog  (0) 2023.05.30
백준 2839 - 설탕배달  (0) 2023.03.07
프로그래머스 lev2. 프린터  (0) 2023.03.06
백준 1021 - 회전하는 큐  (0) 2023.03.02
백준 2798 - 블랙잭  (0) 2023.03.01
    'node.JS' 카테고리의 다른 글
    • puppeteer 라이브러리 - dialog
    • 백준 2839 - 설탕배달
    • 프로그래머스 lev2. 프린터
    • 백준 1021 - 회전하는 큐
    gurwhddl
    gurwhddl

    티스토리툴바