2010-11-28 2 views
18

사파리 5 (Windows 7)가 개체 배열을 정렬 할 수없는 이유를 아는 사람이 있습니까?Safari 5에서 개체 배열을 정렬하지 않는 이유는 무엇입니까?

var arr = [{a:1},{a:3},{a:2}]; 
console.log(arr[0].a+','+arr[1].a+','+arr[2].a); 
arr.sort(function(a,b){return a.a > b.a;}); 
console.log(arr[0].a+','+arr[1].a+','+arr[2].a); 

콘솔 결과는이 FF와 IE에서 잘 작동

1,3,2 
1,2,3 

해야하지만, Safari는 반환

1,3,2 
1,3,2 

답변

47

귀하의 비교 함수가 잘못 :

function(a,b){return a.a > b.a;} 

함수는 반환 할 것으로 예상됩니다. < b, a = b 또는 a> b인지 여부에 따라 음수, 0 또는 양수. 함수가 a> b인지 여부를 나타내는 부울을 반환합니다. 다음과 같이 시도해보세요.

function(a,b){return a.a - b.a;} 
+0

감사합니다. 일부 브라우저는 정교하고 다른 사람들은 딱딱한 혼합 축복입니다. – Marc

+0

@Marc : 실제로 저는이 작은 숫자의 집합으로 운이 좋았다고 믿습니다. 원래 함수는 3 개의 가능한 응답 중 2 개만 반환 했으므로 IE/FF뿐만 아니라 더 큰 세트에서도 실패했을 것입니다. – casablanca

+9

Chrome과 Firefox는 true 또는 false를 허용하지만 Safari는 허용하지 않습니다. –

관련 문제