일반적인 관례에도 불구하고 부울 값(true 또는 false)을 반환하는 JavaScript에서 정렬에 사용되는 비교 함수가 올바르지 않아 예상치 못한 결과가 발생할 수 있습니다.
정렬 알고리즘은 비교 함수가 숫자를 반환할 것으로 예상합니다. 특히:
부울 값(false는 0과 같고 true는 1과 같음)을 반환하면 일관된 비교 함수에 대한 전이성 요구 사항이 실패합니다. . 이 요구 사항은 정렬 알고리즘이 이전 비교를 기반으로 요소 순서를 추론할 수 있도록 보장합니다.
비교 기능을 고려하세요.
function compare(a, b) { return a > b; }
이것은 함수는 'a'가 'b'보다 큰 경우 true(또는 1)를 반환하지만 'b'가 'b'보다 큰 경우에도 false(또는 0)를 잘못 반환합니다. '아'. 결과적으로 정렬 알고리즘은 'a'와 'b'를 동일하게 처리하므로 예측할 수 없는 정렬 순서가 발생합니다.
일부 기본 테스트를 통과했음에도 불구하고 위의 비교 함수는 특정 상황에서 실패합니다. 예:
[0, 1, 0].sort(compare); // Result: [0, 1, 0] (expected: [0, 0, 1]) [1, 1, 0, 2].sort(compare); // Result: [0, 1, 2, 1] (expected: [0, 1, 1, 2])
사전순 정렬(오름차순), 요소가 비교를 위해 자동으로 문자열로 변환되므로 비교 기능을 사용하지 않습니다.
숫자 정렬의 경우 다음을 사용합니다.
function compareNumbers(a, b) { return a - b; }
더 복잡한 비교를 위해서는 조건부 사용 적절한 숫자를 반환하는 명령문:
function compareObjects(a, b) { if (a.property > b.property) return 1; if (a.property < b.property) return -1; return 0; }
위 내용은 부울 반환 값이 JavaScript의 정렬 비교 함수에서 예기치 않은 결과를 초래하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!