关于 sort() 的奇怪问题

问题:

var a = ["aa","vv","bb"];
a.sort((a,b)=>a>b);//["aa", "vv", "bb"],没达到排序效果
var a = ["aa","vv","bb"];
a.sort((a,b)=>a>b?1:-1);//["aa", "bb", "vv"],达到排序效果

为什么???????? sort是按照返回值-1,1,0排序的么?true,false不好使么?

阅读 2.7k
2 个回答

arr.sort(compare)判断的依据compare(a,b)的返回值

  • compare( a, b) < 0 则 a 的排序在 b 之前
  • compare( a, b) = 0 则排序不变(某些老版本的浏览器不遵守这一条)
  • compare( a, b) > 0 则 b 在 a 前面

你的问题应该是在chrome上出现的,当使用node环境的时候,依然是你的第一个代码,却可以正确排序,其中的区别就是,node用的是冒泡排序而chrome用的是插入排序,具体你可以用下面的代码验证一下,分别在chromenode上测试下,查看输出的变化

var a = ['aa', 'vv', 'bb', 'ff', 'dd']
a.sort((a, b) => {
  console.log(a > b, a, b)
  return a > b
})

如果对排序算法有疑问可以看下面这个文章
十大经典排序算法总结(JavaScript描述)

如果对各个浏览器的排序算法有兴趣可以看看下面这个文章
深入浅出 JavaScript 的 Array.prototype.sort 排序算法

当然最好的记忆就是自己亲自经历过的,自己在不同平台上做下测试,会记忆的更深一些.

最后官方的文档
MDN Array.prototype.sort()

推荐问题
宣传栏