sort方法能够根据一定条件对数组元素进行排序。如果调用sort方法时没有传递参数,则按照字母顺序对数组中的元素进行排序

数组排序
示例1 对字符串数组进行排序

var a = ['a', 'c', 'd', 'b']
a.sort()
console.log(a) //["a", "b", "c", "d"]

示例2 对字符串数组进行排序

var a = ["aba", "baa", "aab"]
a.sort()
console.log(a) // ["aab", "aba", "baa"]

注:
1、如果元素不是字符串,则sort方法会把数组中的元素都转换成字符串,在进行排序(没有传递参数时)
2、在排序时,sort方法将根据元素值进行逐位比较,而不是根据字符串的个数进行排序。先比较每个元素的第一个字符,在第一个字符相同的情况下,再比较第二个字符,依次类推
3、在任何情况下,数组中undefined的元素都被排列在数组末尾
5、sort方法是在原数组基础上进行排序的,不会创建新的数组

使用排序函数

根据其它顺序执行操作时,需要为该方法提供一个函数参数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字
排序函数应该具有两个参数a和b,返回值如下:

  • a小于b,在排序后的数组中a应该出现在b之前,返回一个小于0的值
  • a等于b,a与b的相对位置不变,返回0
  • a大于b,a应该出现在b的后面,返回一个大于0的值

示例1 按从小到大顺序排序(应该采用的是冒泡的思想)

var a = [1, 3, 2, 4]
function fn(a, b) {
	return a - b   //从小到大
	//return b - a  从大到小
}
console.log(a.sort(fn))   //[1, 2, 3, 4]

示例2 根据奇偶性质排列数组

var a=[1,2,3,4,5,6]
function fn(a,b){   //如果不好立即,就假设a=1,b=2
	var a=a%2   //获取a的奇偶性,a=1%2=1,奇数
	var b=b%2   //获取b的奇偶性,b=2%2=0,偶数
	if(a==0) return -1;  //a是偶数的话排在左边
	if(b==0) return 1;   //b是偶数的话排在右边
}
console.log(a.sort(fn))  //[2, 4, 6, 1, 3, 5]

两个if语句挺难理解的,实际情况如下:

//a和b都是偶数时,a在左边b在右边
if(a==0&&b==0) return -1;
//a和b都是奇数时,a在左边b在右边
if(a==1&&b==1) return -1;
//a是奇数b是偶数,a在右边b在左边
if(a==1&&b==0) return 1;
//a是偶数b是奇数,a在左边b在右边
if(a==0&&b==1) return -1;

//从上面可以得到,只要a是偶数返回-1即可;b是偶数返回1即可(ab都是偶数,按第一中情况

示例3 把浮点数和整数分开排列

function f(a, b) {
	if (a > Math.floor(a)) return 1; //如果a是浮点数,则调换位置
	if (b > Math.floor(b)) return -1; //如果b是浮点数,则调换位置
}
var a = [1, 3.14, 5.2, 6, 7]
console.log(a.sort(f))   //[1, 6, 7, 5.2, 3.14]