2011-03-30 9 views
2

대한 VALUE1 및 자바 스크립트 함수 값 2 코드 란이다다음 정렬 방법

function compare(value1, value2){ 
     return (value1-value2); 
    }; 
    var values = [0, 1, 5, 10, 15]; 
    values.sort(compare); 
    alert(values); 

코드에 VALUE1 및 값 2는 무엇인가? 왜 내가 value1 - value2를 반환 할 때 배열 항목을 오름차순으로 반환하지만 왜 function에서 value2 - value1을 반환하면 배열 항목이 내림차순으로 반환됩니까?

내가 물어보고 싶은 또 다른 질문은 왜 비교 함수가 sort 메소드에서 정의 될 때 아무런 인수도 없다는 것입니다.

답변

3

배열의 각 쌍에 대해 compare 함수가 호출됩니다. 그래서 당신의 경우에 compare는 0, 1, 1, 5, 5, 10, 10, 15로 호출됩니다.

인수 a는 쌍의 첫 번째 항목을 나타내며 b는 쌍의 두 번째 항목을 나타냅니다. . 예제에서 compare는 실제로 각 쌍마다 네 번 호출됩니다.

비교 이유가 .sort (compare) 내부에서 호출되지 않는 이유는 지연 호출이기 때문입니다. 바로 호출되지 않고 정렬이 호출됩니다. 따라서이 경우 compare은 함수에 대한 참조 일뿐입니다.

+1

또한 sort는 각 쌍에 대한 비교 호출의 반환 값을 확인합니다. 값이 음수이면 value1이 value2보다 작고, 결과가 0이면 값이 같고 결과가 양수이면 value1이 value2보다 큽니다. 당신이 한 일은 결과의 부호를 가지고 노는 것을 오름차순과 내림차순 정렬을 구현하는 것이 었습니다. 이 결과에 따라 sort()는 정렬 할 배열의 항목을 정렬하는 방법을 알고 있습니다. 이 메소드는 모든 유형의 데이터 (문자열, 부동 또는 더 복잡한 유형 -이 경우 올바르게 비교하는 것이 중요)에 사용될 수 있으며 사용됩니다. – Adi

+0

@Adi 감사합니다. 그 부분을 언급하는 것을 잊었습니다. – Chris

+0

고마워,하지만 난 여전히 궁금해서 거기에 인자 값을 비교 함수에 정의 된, 내가 무슨 뜻인지 values.sort (compare (argumentValue1, argumentValue2)); – dramasea