2016-07-16 2 views
0

을 문자열을 정렬하는 것 같다사파리 브라우저 자바 스크립트 배열이 잘못 사파리 콘솔에서

var x = ["20", "21"]; x.sort(function(a,b){return b > a}); x 
> ["20", "21"] 

크롬 :

이 (크롬 일치)하지만, Safari에서 예상대로 작동
var x = ["20", "21"]; x.sort(function(a,b){return b > a}); x 
> ["21", "20"] 

:

"20" > "21" 
false 

내 머리를 긁적.

+0

그리고 당신은 물론이는 [localeCompare]에 문자열을 정렬 더 적절한 방법 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/ 시도 Reference/Global_Objects/String/localeCompare)를 사용하고'return a.localeCompare (b);를 수행하면 – adeneo

답변

0

비교 콜백 함수는 참/거짓 대신 숫자를 반환해야합니다. 이것은 정렬에서 비교할 목적으로 "미만"기능 만 제공 할 수있는 다른 언어와 매우 다릅니다.

서로 다른 관찰 결과이 두 브라우저 결과에서 sort()의 다른 구현 ...

정렬 함수의 몸은 단지 return b - a해야한다.

+0

이 완전히 정확하지 않고 음수, 0 또는 양수를 반환합니다. – charlietfl

+0

hmmmmmmmmm 예 ... –

+0

@charlietfl 답변을 삭제 취소하고 수정했습니다. –

1

Array#sort은 정렬하려는 유형에 대한 콜백이 필요합니다.

문자열은 기본적으로 숫자가 아닌 문자열을 정렬하므로 기본적으로 정렬에 숫자를 사용해야합니다. 첫 번째는 문자열로 정렬하고 두 번째는 숫자 값으로 정렬합니다.

var x = ["20", "21", "2", "100", "10", "1", "3", "30"]; 
 

 
x.sort(); 
 
console.log(x); 
 

 
x.sort(function (a, b) { 
 
    return a - b; // implicit casting to Number 
 
}); 
 
console.log(x);

+0

이것은 핵심적인 문제는 아니지만 핵심 문제는 부적합한 비교 콜백으로 정렬 할 수 있다는 것입니다. 나는 대답을 썼지 만 그것을 삭제했다. 나는 그것을보다 정확하도록 편집해야했다. –

관련 문제