13-9. Array 오브젝트(ES3 기준) / sort(분류), sort()와 Unicode
sort()
구분 | 데이터(값) |
---|---|
data | 대상 |
파라미터 | 함수opt |
반환 | sort 결과 |
- 엘리먼트 값을 승순으로 정렬
정렬 기준은 엘리먼트 값의 Unicode
코드 포인트가 작으면 앞에 오고 크면 뒤에 옵니다.
var value = [4, 2, 3, 1]; console.log(value.sort()); // [1, 2, 3, 4]
승순이란 작은 값이 앞에오고 큰 값이 뒤에오는 형태입니다.
가나다 순이라고도 합니다.var value = ["A1", "A01", "B2", "B02"]; console.log(value.sort()); // ["A01", "A1", "B02", "B2"]
- 왼쪽에서 오른쪽으로 문자 하나씩 비교하여 정렬
- A01과 A1에서 A가 같으므로 다음 문자 비교
- 0과 1을 비교하게되며 0이 1보다 코드 포인트가 앞에있으므로 앞에 정렬
비교가 완료되면 다음 문자는 비교하지 않습니다.
B2 / B02
B / B 끼리 비교 - 같음
2 / 0 끼리 비교 / 0이 더 작음 -끝-
B02의 2는 비교하지 않습니다.
주의 : sort 대상 배열도 정렬됨
원본훼손var value = [4, 2, 3, 1]; console.log(value.sort()); // [1, 2, 3, 4] console.log(value); // [1, 2, 3, 4]
sort 대상 배열이 훼손되면 안될 경우엔 사전에 복사를 합니다.
값이 undefined이면 끝으로 이동
var value = [, , 1, 2]; console.log(value.sort()); // [1, 2, undefined, undefined]
undefined가 1, 2보다 크다는 것이 아닙니다.
단지 undefined이니깐 뒤에 정렬하는 것입니다.
sort()와 Unicode
숫자에 해당하는 Unicode의 code point로 정렬
var value = [101, 26, 7, 1234]; console.log(value.sort()); // [101, 1234, 7, 26]
- 사람이 생각하는 일반적인 정렬은 [7, 26, 101, 1234]입니다.
위의 결과처럼 정렬된 것은 코드 포인트로 비교하여 sort하기 때문입니다.
- 101과 26에서 1이 2보다 작으므로 101이 26보다 작은 것으로 정렬됩니다.
또한 101과 7에서 1이 7보다 작으므로 101이 7보다 작은 것으로 정렬됩니다.
- 이를 해결하려면 sort()의 파라미터에 함수를 작성하고 함수에서 정렬해야 합니다.
- 다음 절에서 알고리즘을 다룹니다.