JavaScript의 배열 정렬을 위한 사용자 정의 비교 함수: 부울 반환이 충분하지 않은 경우>
사용자 정의 비교 함수는 종종 다음과 같은 용도로 사용됩니다. 배열의 기본 사전 편찬 순서를 수정하는 경우, 일반적인 오해는 단순히 함수에서 true 또는 false를 반환하는 것이 다음과 같다는 것입니다. 충분한. 그러나 이 접근 방식은 올바르지 않으며 신뢰할 수 없는 정렬 결과를 초래할 수 있습니다.
부울 비교 함수 관련 문제
비교 함수에서 부울을 반환할 때 발생하는 문제는 다음과 같습니다. 이는 JavaScript 사양에 정의된 "일관된 비교 기능"에 대한 요구 사항을 위반할 수 있다는 것입니다. 일관된 비교 함수는 비교된 요소의 상대적 순서를 나타내는 숫자(구체적으로 -1, 0 또는 1)를 반환해야 합니다.
숫자 대신 부울을 반환하면 예기치 않은 동작이 발생할 수 있습니다.
-
전이성 위반: 함수 function(a, b) { return a > 비; } b가 a보다 크면 false를 반환합니다. 이는 b가 a보다 먼저 정렬되어야 함을 의미합니다. 그러나 함수는 a와 b가 같을 때도 false를 반환합니다. 이는 a가 b와 같고 b가 c보다 작으면 a는 c보다 작아야 한다는 전이 속성과 모순됩니다.
-
정의되지 않은 정렬 순서: 비교 함수에서 false를 반환하면 정의되지 않은 정렬 순서가 발생할 수 있습니다. 예를 들어 [1, 1, 0, 2].sort(function(a, b) { return a > b; }) 정렬은 [0, 1, 1, 2] 또는 [1, 1, 0, 2] 정렬 알고리즘의 구현에 따라 다릅니다.
정확한 비교 함수
일관되고 안정적인 정렬을 보장하려면 비교된 요소의 상대적 순서를 나타내는 숫자를 반환하는 비교 함수를 정의하는 것이 중요합니다.
-
일반 비교 함수: 사전식 비교의 경우 일반 함수는 function(a, b) { if (a < b) -1을 반환합니다. (a > b)인 경우 1을 반환하고; 그렇지 않으면 0을 반환합니다. }.
-
숫자 비교: 숫자를 비교하려면 더 간단한 함수를 사용할 수 있습니다: function(a, b) { return a - b; }.
-
특정 속성별 비교: 특정 속성별로 객체나 배열을 정렬하기 위해 함수는 해당 속성에 액세스하여 해당 값을 비교할 수 있습니다. function(a, b) { return a. name.localeCompare(b.name); } 개체 이름별로 정렬합니다.
결론
JavaScript의 비교 함수에 부울 반환을 사용하고 싶을 수도 있지만 일관된 비교 함수를 위해 지정된 요구 사항을 따르는 것이 중요합니다. 이렇게 하면 정렬 알고리즘이 요소를 적절하게 비교하고 신뢰할 수 있고 예측 가능한 결과를 생성할 수 있습니다.
위 내용은 JavaScript 배열 정렬 비교 함수에서 불리언을 반환하는 것이 잘못된 이유: 올바른 사용법을 위한 가이드?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!