为什么Safari 5不会对对象数组进行排序?

Mar*_*arc 18 javascript arrays safari

任何人都知道为什么Safari 5(Windows 7)无法对对象数组进行排序?

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);
Run Code Online (Sandbox Code Playgroud)

控制台结果应该是

1,3,2
1,2,3
Run Code Online (Sandbox Code Playgroud)

这在FF和IE中工作正常,但Safari返回:

1,3,2
1,3,2
Run Code Online (Sandbox Code Playgroud)

cas*_*nca 47

你的比较功能是错误的:

function(a,b){return a.a > b.a;}
Run Code Online (Sandbox Code Playgroud)

根据a <b,a = b或a> b,该函数应返回负数,零或正数.您的函数返回一个布尔值,指示是否a> b.尝试类似的东西:

function(a,b){return a.a - b.a;}
Run Code Online (Sandbox Code Playgroud)

  • Chrome和Firefox会接受真或假,Safari则不然. (9认同)
  • 你也可以`return aa> ba?必要时1:-1 (3认同)