>웹 프론트엔드 >JS 튜토리얼 >JavaScript Sort_javascript 팁의 잘못된 사용 예

JavaScript Sort_javascript 팁의 잘못된 사용 예

WBOY
WBOY원래의
2016-05-16 16:08:341083검색

얼마 전 동료의 코드에서 매우 마법 같은 문제가 발생했습니다. 일반적인 프로세스는 객체로 구성된 배열을 정렬하는 데 사용되며 b 속성은 선호 조건으로 사용됩니다. 1과 같음 a의 값이 무엇이든 그것이 먼저 옵니다. 아주 간단한 질문인데, 문제는 그가 이번에 정렬을 구현하기 위해 두 번이나 사용했다는 점이다. 먼저 a의 속성에 따라 정렬하고, 그 다음 b의 값에 따라 정렬한다. 문제는 두 번째 종류에 있습니다.

첫 번째 정렬에서는 배열이 a의 속성에 따라 큰 것부터 작은 것 순으로 정렬되는 것을 당연하게 여깁니다. 두 번째에서는 원래 배열의 순서만 변경하면 안 됩니다(보통 작성됨). 0 또는 -1을 반환하는 메서드에서) b가 1인 요소를 맨 앞으로 가져오는 것을 고려하세요. 그러나 실제로 이는 언어에서 선택한 정렬 알고리즘과 관련이 있습니다. JavaScript(및 기타 언어)의 내장 정렬 방법은 여러 정렬 알고리즘의 모음을 사용하며 때로는 동일한 요소의 위치를 ​​보장하지 않습니다. 일관성이 있습니다.

다음은 스택오버플로우

에서 찾은 예시입니다.

코드 복사 코드는 다음과 같습니다.

var arrayToSort = [
{이름: 'a', 강도: 1}, {이름: 'b', 강도: 1}, {이름: 'c', 강도: 1}, {이름: 'd', 강도: 1},
{이름: 'e', ​​​​강도: 1}, {이름: 'f', 강도: 1}, {이름: 'g', 강도: 1}, {이름: 'h', 강도: 1},
{이름: 'i', 강도: 1}, {이름: 'j', 강도: 1}, {이름: 'k', 강도: 1}, {이름: 'l', 강도: 1},
{이름: 'm', 강도: 1}, {이름: 'n', 강도: 1}, {이름: 'o', 강도: 1}, {이름: 'p', 강도: 1},
{이름: 'q', 강도: 1}, {이름: 'r', 강도: 1}, {이름: 's', 강도: 1}, {이름: 't', 강도: 1}
];

arrayToSort.sort(함수 (a, b) {
b.strength 반환 - a.strength;
});

arrayToSort.forEach(함수(요소) {
console.log(요소.이름);
});

마지막 요소의 값은 여전히 ​​a부터 t까지라고 생각하지만, 실제 실행 결과는 순서가 어긋납니다. 이는 정렬 알고리즘이 원래 배열의 순서를 유지하지 않아 불안정하기 때문입니다.

그러면 이런 상황이 발생하지 않도록 최선을 다해야 합니다. 제 동료의 예를 들면, 두 정렬의 논리를 하나로 병합하는 것이 가능한 방법일 것입니다. 여러 정렬로 나누어야 한다면 병합하는 것이 좋습니다. 원래 배열의 논리 순서는 요소의 속성에 기록됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.