-
정렬 메소드 sort와 localeCompareLanguage/JavaScript 2023. 3. 6. 15:30
프로그래머스 문제를 풀다가 학습한 내용이다.
Q. 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.배열안에 있는 문자열을 특정 조건으로 정렬하는 문제였다. 배열 내장 메소드 sort를 사용하면 된다.
arr.sort([compareFunction])
sort 메소드는 인자로 정렬 순서를 정의하는 함수를 콜백함수로 받는데, 콜백함수의 반환 값이 양수이면 오름차순, 음수이면 내림차순, 0이면 정렬하지 않는다.
그런데 중요한 것은 비교함수의 리턴 값이 조건부가 가능하다는 것인데 이것을 생각하지 못했다.
function solution(strings, n) { return strings.sort().sort((a, b) => { if(a[n] < b[n]) return -1 if(a[n] > b[n]) return 1 }) } // another function solution(strings, n) { return strings.sort((a,b) => a[n].localeCompare(b[n]) === 0 ? a.localeCompare(b) : a[n].localeCompare(b[n])) }
referenceString.localeCompare(compareString) compareString 전에 referenceString가 위치하는 경우 음수, 반대의 경우 양수, 동등할 경우 0을 반환한다.
'Language > JavaScript' 카테고리의 다른 글
배열 fill 메소드, 문자열 repeat 메소드 (0) 2023.03.15 반복문(while, do-while) (0) 2023.03.15 [자바스크립트] Map과 Set (0) 2023.01.17 [Javascript] 클래스의 정적(static)메소드와 프로퍼티, 상속 (0) 2023.01.03 [Javascript] 클래스의 동작원리와 클래스 상속(오버라이딩) (0) 2023.01.03