자바스크립트 sort() 함수에 관한 질문

자바스크립트 sort() 함수에 관한 질문

작성일 2024.03.28댓글 2건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요? 자바스크립트 공부하다가 이해가 안 가는게 있어서 질문글 올립니다.

이러한 sort()함수 예문을 만났는데요

 array.sort((a, b) => (b+a)-(a+b));

기본적인 사용법인 array.sort((a,b) => a-b)와 array.sort((a,b) => b-a)가 각각 어떤 결과값이 나오는지에 대해서는 알고 있습니다. 하지만 위 표현식에서의 sort()는 어떻게 동작하는건지 이해를 못하겠습니다. 콜백함수 내용을 (a+b)-(b+a)로 바꾸면 또 다른 결과 값이 나오는데 이것도 이해가 안갑니다.


#자바스크립트 sort() #자바스크립트 sort 원리 #자바스크립트 sort 함수 #자바스크립트 sort 내림차순 #자바스크립트 sort 문자열 #자바스크립트 sort 숫자 #자바스크립트 sort reverse #자바스크립트 sort 알고리즘 #자바스크립트 sort 조건 여러개 #자바스크립트 sort 시간복잡도

profile_image 익명 작성일 -

자바스크립트 연산자의 특이한 점이 있어서 그렇것 같아요.

1 + '1' = '11'

1 - '1' = 0

같은 타입끼리 연산이 되어야 정상일 것 같지만, 자바스크립트에서는 타입이 달라도 위와 같이 특이하게 연산이 됩니다.

그렇기 때문에 자바스크립트에서는 타입이 보장되지 않은 경우에, (b+a)-(a+b) 를 수학적으로 접근하면 질문하신 것과 같이 오류가 발생할 수 있습니다.

a가 1, b가 '2' 라고 가정해보면

수학적으로 생각한다면 b + a - a - b => 0 이 정상인데요

자바스크립트에서는 이런식으로 동작합니다. 순서를 바꾸면 결과가 달라집니다.

(b+a)-(a+b) => ('2'+1)-(1+'2') => '21'-'12' => 9

(a+b)-(b+a) => (1+'2')-('2'+1) => '12'-'21' => -9

동작 원리는 이렇구요, 이해하기가 쉽지 않은만큼 (b+a)-(a+b) 같은 코드는 좋은 코드가 아니라고 보시면됩니다.

타입을 최대한 동일하게 맞춰서 정렬 로직을 실행하는게 좋아요.

profile_image 익명 작성일 -

저도 오랫동안 사용만 해봤지 그 알고리즘에 대해서는 이해할려고 하지 않았던중 궁금해서 구글링을 해 보았습니다.

https://stackoverflow.com/questions/1494713/how-does-javascripts-sort-work

마지막에 설명된 예가 좋은 예 같네요

let arr = [90, 1, 20, 14, 3, 55];

var sortRes = [];

var copy = arr.slice(); //create duplicate array

var inc = 0; //inc meant increment

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

sortRes[inc] = [ a, b, a-b ];

inc += 1;

return a - b;

});

var p = 0;

for (var i = 0; i < inc; i++) {

copy = arr.slice();

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

p += 1;

if (p <= i ) {

return a - b;

}

else{

return false;

}

});

p = 0;

console.log(copy +' \t a: '+ sortRes[i][0] +' \tb: '+ sortRes[i][1] +'\tTotal: '+ sortRes[i][2]);

}

함수의 매개변수와 변수생성에 관한 질문

자바스크립트를 공부하면서 조금 헷갈리는게 있습니다. 보통 js에서 변수를... 첫번째 질문이고 함수를 호출할때 매개변수로 아무것도 넘겨주지 않고 비워놓고 함수를...

자바스크립트 sort질문입니다.

... 따라서, sort 함수에서 나머지 작업은 자바스크립트 엔진이 처리하지만... 비교 작업에 대해서는 프로그래머의 재량에 맞기게 되고, 이를 활용하면 다양한 정렬이...

sort() 함수에 대한 질문

... 결과 -> 4,33,1111,2222 function이 이해가 잘 안가는데 sort() 함수 안에... 부탁드려요 얼마전에 제가 질문한 내용에 답변이 있습니다.....

자바스크립트에서 sort질문

... 질문?? sort에서 어떻게 내림차순과오름차순을 할수 있죠? sort라고 치면... 하는 함수를 사용하게 됩니다 document.write(obj.sort() + "") // 오름 차순(기본값)...

sort() 함수에 관한 질문입니다.

... 그리구 sort() 알고리즘은 predicate 를 지원합니다.. 일종의 bool 함수인데요.. 이것은 사용자가 설정하기 나름입니다. 일단 const bool greater (string& a...