웹 개발 메모장
[자바스크립트] 숫자 배열, 문자 배열 정렬하기 sort() 본문
배열.sort();
sort() 라는 배열을 정렬해주는 배열의 내장함수가 있습니다.
아래와 같은 배열이 있을 때
1 | var arr = ['red', 'blue', 'green', 'white', 'black']; | cs |
아래 처럼 sort() 를 호출해주면
1 | arr.sort(); | cs |
배열이 [ 'black', 'blue', 'green', 'red', 'white' ] 이렇게 ABC 순으로 정렬됩니다.
문제는 아래 처럼 숫자를 정렬하는 경우에도 ABC 순으로 정렬이 되기 때문에
1 2 | var arr2 = [1,2,3,10,50,70,8,4]; arr2.sort(); | cs |
배열이 [ 1, 10, 2, 3, 4, 50, 70, 8 ] 이렇게 정렬됩니다.
따라서
1 | arr2.sort(function (f, s) { return f-s; }); | cs |
결과 : [ 1, 2, 3, 4, 8, 10, 50, 70 ]
이렇게 뺄셈 연산 함수를 인자로 넘겨 크기비교를 하여 리턴되는 값의 음수, 양수를 통해 위치를 판단하게 할 수 있습니다.
내림차순 정렬은 반대로 f-s 가 아닌 s-f 로 return 해주면 음수, 양수가 바뀌므로 내림차순 정렬이 됩니다.
여기서 또 문제는 문자열의 내림차순 정렬입니다.
물론
1 | arr.sort().reverse(); | cs |
결과 : [ 'white', 'red', 'green', 'blue', 'black' ]
이런 방법으로 우선 정렬시키고 배열을 역순으로 바꾸면 내림차순 정렬이 되겠지만 정렬할 때 내림차순으로 정렬하기 위해선 위에서 숫자를 정렬할 때 처럼 sort() 에 인자로 함수를 넣어주어 음수, 양수를 통해 비교하여 정렬시켜야 합니다.
문자열은 비교연산은 가능하고 뻴셈 연산이 되지 않으니
1 2 3 4 5 | function compStringReverse(a, b) { if (a > b) return -1; else if (b > a) return 1; else return 0; } | cs |
위 처럼 함수를 정의하고 아래 처럼 함수를 인자로 넘겨주면 됩니다.
1 | arr.sort(compStringReverse); | cs |
결과 : [ 'white', 'red', 'green', 'blue', 'black' ]
'옛날.. > 자바스크립트' 카테고리의 다른 글
[자바스크립트] 템플릿 문자열 (0) | 2018.01.02 |
---|---|
[JQuery] input type=file 태그 CSS 변경하기(trigger()) (0) | 2018.01.02 |
[자바스크립트] 에디터 만들기(document.execCommand()) (1) | 2017.11.20 |
[JQuery] 상단메뉴 슬라이드(펼치기) 초간단 (0) | 2017.11.15 |
[자바스크립트] 배열의 reduce() 함수 (0) | 2017.11.01 |
Comments