얼마 전 동료의 코드에서 매우 마법 같은 문제가 발생했습니다. 일반적인 프로세스는 객체로 구성된 배열을 정렬하는 데 사용되며 b 속성은 선호 조건으로 사용됩니다. 1과 같음 a의 값이 무엇이든 그것이 먼저 옵니다. 아주 간단한 질문인데, 문제는 그가 이번에 정렬을 구현하기 위해 두 번이나 사용했다는 점이다. 먼저 a의 속성에 따라 정렬하고, 그 다음 b의 값에 따라 정렬한다. 문제는 두 번째 종류에 있습니다.
첫 번째 정렬에서는 배열이 a의 속성에 따라 큰 것부터 작은 것 순으로 정렬되는 것을 당연하게 여깁니다. 두 번째에서는 원래 배열의 순서만 변경하면 안 됩니다(보통 작성됨). 0 또는 -1을 반환하는 메서드에서) b가 1인 요소를 맨 앞으로 가져오는 것을 고려하세요. 그러나 실제로 이는 언어에서 선택한 정렬 알고리즘과 관련이 있습니다. JavaScript(및 기타 언어)의 내장 정렬 방법은 여러 정렬 알고리즘의 모음을 사용하며 때로는 동일한 요소의 위치를 보장하지 않습니다. 일관성이 있습니다.
다음은 스택오버플로우
에서 찾은 예시입니다.arrayToSort.sort(함수 (a, b) {
b.strength 반환 - a.strength;
});
arrayToSort.forEach(함수(요소) {
console.log(요소.이름);
});
마지막 요소의 값은 여전히 a부터 t까지라고 생각하지만, 실제 실행 결과는 순서가 어긋납니다. 이는 정렬 알고리즘이 원래 배열의 순서를 유지하지 않아 불안정하기 때문입니다.
그러면 이런 상황이 발생하지 않도록 최선을 다해야 합니다. 제 동료의 예를 들면, 두 정렬의 논리를 하나로 병합하는 것이 가능한 방법일 것입니다. 여러 정렬로 나누어야 한다면 병합하는 것이 좋습니다. 원래 배열의 논리 순서는 요소의 속성에 기록됩니다.