정수 배열을 올바르게 정렬하는 방법

정수만 포함하는 배열에서 최고값과 최저값을 얻는 것은 생각보다 어려운 것 같습니다.

var numArray = [140000, 104, 99]; numArray = numArray.sort(); console.log(numArray)

이걸 보면 알 수 있을 것 같은데99, 104, 140000대신 표시된다.104, 140000, 99이 정렬은 값을 문자열로 처리하는 것 같습니다.

정렬 함수를 실제로 정수 값으로 정렬할 수 있는 방법이 있습니까?



질문에 대한 답변



기본적으로 정렬 방법은 요소를 알파벳 순으로 정렬합니다.숫자로 정렬하려면 숫자 정렬을 처리하는 새로운 메서드(sort Number, 아래 그림 참조)를 추가합니다.

var numArray = [140000, 104, 99]; numArray.sort(function(a, b) {
if( a === Infinity )
return 1;
else if( isNaN(a))
return -1;
else
return a - b; });
console.log(numArray);

문서:

Mozilla는 Infinity 또는 NaN을 포함하지 않는 어레이에 이 비교 기능을 권장합니다(이유는Infinity - Infinity0이 아닌 NaN입니다).이는 함수 내에서 NaN과 Infinity를 다루는 Sergio Abreu 에디션에 의해 해결되었습니다.

키를 기준으로 객체를 정렬하는 예도 있습니다.




위의 모든 답변을 바탕으로 다음과 같이 한 줄에 걸쳐 수행할 수도 있습니다.

var numArray = [140000, 104, 99]; numArray = numArray.sort(function (a, b) {
return a - b;
});
//outputs: 99, 104, 140000 



왜 모든 사람들이 비교기 기능을 다음에 건네줄 것을 추천하는지 놀랍다.sort()이렇게 하면 정렬이 매우 느려집니다.

숫자를 정렬하려면 Typeed Array를 작성하기만 하면 됩니다.

var numArray = new Float64Array([140000, 104, 99]); numArray = numArray.sort(); console.log(numArray)




array.displays는 기본적으로 사전 정렬을 수행합니다.숫자 정렬의 경우 사용자 고유의 함수를 제공합니다.다음은 간단한 예입니다.

function compareNumbers(a, b) {
return a - b; }
numArray.sort(compareNumbers); 

또한 정렬은 “제자리”에서 작동하므로 할당이 필요하지 않습니다.




이 답변은 기존 답변 중 일부와 동일하지만 ECMAScript 6 화살표 함수는 가독성을 희생하지 않고 인라인 정렬 함수를 정의할 수 있는 보다 콤팩트한 구문을 제공합니다.

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

현재 대부분의 브라우저에서 지원됩니다.