Search
Duplicate

sort() 함수, localeCompare() 함수

생성일
2023/01/31 02:48
태그
JS

sort() 함수

배열을 정렬하기 위해 사용

Array.prototype.sort()

sort() 함수는 배열의 요소를 적절한 위치에 정렬한 후, 그 배열을 반환한다
arr.sort([compareFunction]) // compareFunction // 정렬 순서를 정의하는 함수 // 이 값이 생략되면, 배열의 element들은 문자열로 취급되어, 유니코드 값 순서대로 정렬된다 // 이 함수가 a, b 두개의 element를 파라미터로 입력받을 경우, // 이 함수가 리턴하는 값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬하고, // 이 함수가 리턴하는 값이 0보다 클 경우, b가 a보다 앞에 오도록 정렬한다 // 만약 0을 리턴하면, a와 b의 순서를 변경하지 않는다
JavaScript
복사

리턴값

compareFunction 규칙에 따라서 정렬된 배열을 리턴
이때, 원본 배열인 arr가 정렬이 되고, 리턴하는 값 또한 원본 배열인 arr을 가리키고 있음에 유의

예시

const arr1 = [2, 1, 3]; const arr2 = ['banana', 'apple', 'orange'] arr1.sort(); document.writeln(arr1 + '<br>'); // [1, 2, 3] arr2.sort(); document.writeln(arr2 + '<br>'); // ['apple', 'banana', 'orange']
JavaScript
복사
const arr = [2, 1, 3, 10]; arr.sort(function(a, b) { if(a > b) return 1; if(a === b) return 0; if(a < b) return -1; }); document.writeln(arr + '<br>'); // [1, 2, 3, 10]
JavaScript
복사
배열의 숫자들을 유니코드 순서가 아닌, 숫자 크기 순서대로 정렬하기 위해서
sort() 함수의 파라미터 함수를 정의하였다
이 함수는 a, b 두개의 파라미터를 입력받고,
a > b 이면 1
a == b 이면 0
a < b 이면 -1 을 리턴
주어진 배열을 오름차순 정렬
const arr = [2, 1, 3, 10]; arr.sort(function(a, b) { return a - b; }); document.writeln(arr + '<br>'); // [1, 2, 3, 10]
JavaScript
복사
두 숫자의 차가 양수값이냐, 음수값이냐를 이용하여
숫자를 오름차순으로 정렬하는 예제를 위와같이 단순화 할 수도 있다

sort() 함수로 숫자 오름차순 정렬

const arr = [2, 1, 3, 10]; arr.sort(function(a, b) { return a - b; }); document.writeln(arr + '<br>'); // [1, 2, 3, 10]
JavaScript
복사

sort() 함수로 숫자 내림차순 정렬

const arr = [2, 1, 3, 10]; arr.sort(function(a, b) { return b - a; }); document.writeln(arr + '<br>'); // [10, 3, 2, 1]
JavaScript
복사

sort() 함수로 문자열 정렬

오름차순

const arr = ['banana', 'b', 'boy']; arr.sort(); document.writeln(arr + '<br>'); // ['b', 'banana', 'boy']
JavaScript
복사

내림차순

const arr = ['banana', 'b', 'boy']; arr.sort(function(a, b) { if(a < b) return 1; if(a > b) return -1; if(a === b) return 0; }); document.writeln(arr + '<br>'); // ['boy', 'banana', 'b']
JavaScript
복사

sort() 함수로 객체 정렬

const arr = [ {name: 'banana', price: 3000}, {name: 'apple', price: 1000}, {name: 'orange', price: 500} ]; arr.sort(function(a, b) { return a.price - b.price; }); document.writeln(JSON.stringify(arr[0]) + '<br>'); document.writeln(JSON.stringify(arr[1]) + '<br>'); document.writeln(JSON.stringify(arr[2]) + '<br>'); // {"name":"orange","price":500} // {"name":"apple","price":1000} // {"name":"banana","price":3000}
JavaScript
복사
→ 원본을 바꿔버리는 sort() 함수
원본을 바꾸고 싶지 않다면? slice()를 중간에 끼워준다 → 그러면 원본을 복사해서 정렬하기 떄문에 원본이 지워지지 않는다
const arr = [2, 1, 3, 10, 5, 9, 4, 8, 6]; array.slice().sort((a, b) => a - b); // 오름차순 array.slice().sort((a, b) => b - a); // 내림차순
JavaScript
복사
→ 문자열을 정렬하고 싶으면
arr = ['apple', 'orange', 'grape', 'banana', 'kiwi'] arr.slice().sort((a, b) => a[0].charCodeAt() - b[0].charCodeAt()) // ['apple', 'banana', 'grape', 'kiwi', 'orange'] arr.slice().sort((a, b) => b[0].charCodeAt() - a[0].charCodeAt()) // ['orange', 'kiwi', 'grape', 'banana', 'apple']
JavaScript
복사
→ 완벽하게 사전순으로 정리하고 싶다면?
arr.slice().sort((a, b) => a.localeCompare(b)) // ['apple', 'banana', 'grape', 'kiwi', 'orange'] arr.slice().sort((a, b) => b.localeCompare(a)) // ['orange', 'kiwi', 'grape', 'banana', 'apple'] // 한글로도 적용이 가능
JavaScript
복사