Array.prototype.sort()
의 변화
- 배열을 정렬할 때 많이 사용되는 메서드이다.
- ES2019 이후에 큰 변화가 있었다.
ES2019 이전의 Array.prototype.sort()
- ES2019 이전의 스펙에서는
stable
한 정렬이 요구사항이 아니었다.- 정렬 조건이 동일한 엘리먼트가 정렬 이전의 순서를 지키지 않아도 됐다는 뜻이다.
- 이러한 스펙은 몇몇 경우에 예상치 못한 결과를 초래했다.
ES2019 과 그 이후의 Array.prototype.sort()
- 정렬 조건이 동일한 엘리먼트가 정렬 이전의 순서를 지켜야만 하는 것이 요구사항이 됐다.
- 이를 위해
Tim Sort
라는 정렬 알고리즘이 도입되었다.- 병합 정렬과 삽입 정렬이 혼합된 것이다.
- 작은 배열이나 큰 배열 둘 다 성능이 좋다.
- 이전에 사용되던
Quick Sort
보다 훨씬 빠르고 효율적이다.
안정적인 정렬의 예제
const a = ["b", "B", "a", "A", "c", "C"];
a.sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()));
console.log(a); // (6) ['a', 'A', 'b', 'B', 'c', 'C']
const b = ["b", "B", "A", "a", "C", "c"];
b.sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()));
console.log(b); // (6) ['A', 'a', 'b', 'B', 'C', 'c']
const c = ["b", "B", "B", "b", "A", "a", "C", "c"];
c.sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()));
console.log(c); // (8) ['A', 'a', 'b', 'B', 'B', 'b', 'C', 'c']
toLowerCase()
메서드의 결과로 나온 값들은 모두 정렬 조건이 같지만, 원본의 순서에서 순서가 변하지 않는다.
반응형
'자바스크립트 > 모던 자바스크립트' 카테고리의 다른 글
모던 자바스크립트, Reflect (리플렉트) 객체란? (0) | 2023.03.20 |
---|---|
모던 자바스크립트, TypedArray (타입이 있는 배열) (0) | 2023.03.19 |
모던 자바스크립트, 편의 유틸 배열 메서드 (0) | 2023.03.13 |
모던 자바스크립트, 편의 유틸 문자열 메서드 (0) | 2023.03.12 |
모던 자바스크립트, UTF-16 이슈 해결에 관련된 문자열 함수 (0) | 2023.03.11 |