View

Array - sort

special 2021. 8. 21. 17:17

sort는 배열의 요소를 정렬하여 반환한다.

즉, 원본 배열 자체가 바뀌므로 주의하여 사용한다. (복사본이 만들어지는 것이 아님)

const owners = ['Jonas', 'Zach', 'Adam', 'Martha'];
console.log(owners.sort()); // ["Adam", "Jonas", "Martha", "Zach"]
console.log(owners); // ["Adam", "Jonas", "Martha", "Zach"]

기본 정렬 순서는 문자열의 유니코드 포인트를 따른다.

 

요소를 문자열로 변환하고 정렬하기 때문에

숫자라고 하더라도 문자로 생각하여 인식한다(함수가 없는경우)

const movements = [200, 450, -400, 3000, -650, -130, 70, 1300];
console.log(movements.sort()); // [-130, -400, -650, 1300, 200, 3000, 450, 70]

첫글자만 따로 보면, -1, -4, -6, 1, 2, 3, 4, 7 인 결과이다.

 

숫자의 경우

 

배열을 순환하며 두 요소를 비교하게 되는데(a,b라고 가정한다),

return 되는 숫자가 0보다 큰 경우에는 a, b 순서가 b, a로 바뀐다 (return 1)

return 되는 숫자가 0보다 작은 경우에는 a, b 순서가 그대로 유지된다. (return -1)

 

오름차순 정렬

arr.sort(function(a,b) {

    if (a>b) return 1;

    if (a<b) return -1;

});

혹은

arr.sort((a, b)=> {

    if (a>b) return 1;

    if (a<b) return -1;

});

 

ES2015(ES6)에서 아래와 같이 화살표함수로 간략하게 표현할 수 있다.

arr.sort((a,b)=>a-b);

 

a-b가 되는 이유
a > b 라고 가정하면 a-b는 무조건 0보다 큰 수가 된다.
a < b 인 경우에는 a-b의 결과는 0보다 작은 수가 된다.
따라서 위와 같이 표현 할 수 있다.

 

a-b = 0인 경우에는
순서가 변하지 않고 그대로 유지된다.

 

내림차순 정렬

arr.sort(function(a,b) {

    if(a>b) return -1;

    if(a<b) return 1;

});

 

ES6

arr.sort((a,b)=>b-a);

 


string과 number가 섞여있는 array에서는 사용하지 않는다.

Share Link
reply
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28