sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的。
由于它取决于具体实现,因此无法保证排序的时间和空间复杂性。
也就是说直接使用sort来对数组进行排序的话,它是根据元素的Unicode来排序的,如:
var arr=[100,23,1,1000,2]
console.log(arr.sort())
运行结果:
但可以向sort传入一个参数(该参数为函数),来对数组进行升序或降序排列
1.当要比较的元素为Number类型时:
function sheng(a,b){
return a-b //会将数组升序排列
}
function jiang(a,b){
return b-a //会将数组降序排列
}
var arr=[100,23,1,1000,2]
console.log(arr.sort(sheng))//1,2,23,100,1000
console.log(arr.sort(jiang))//1000,100,23,2,1
2.当要比较的元素为string类型时:
// 找return 1的那项,如果前面形参的大于后面的形参,则为升序,反之则为降序
function sheng(a,b){
if(a>b)return 1 //升序
if(a<b)return -1 //降序
return 0 //不进行排序(浏览器不同,结果可能不同)
}
function jiang(a,b){
if(b>a)return 1 //降序
if(b<a)return -1 //升序
return 0 //不进行排序(浏览器不同,结果可能不同)
}
var arr=['tom','cat','jimi']
console.log(arr.sort(sheng))// ["cat", "jimi", "tom"]
console.log(arr.sort(jiang))// ["tom", "jimi", "cat"]
sort还可以对对象数组按照对象属性来排序
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic',value: 13 },
{ name: 'Zeros', value: 37 }
];
items.sort(function(a,b){
return (a.value-b.value) //进行升序排列
})
console.log(items)
运行结果:
参考:MDN