一、概念
sort()方法对数组的元素进行排序,并返回按指定要求排序后的数组。该默认排序顺序是将元素转换为字符串后进行比较。
二、语法
arr.sort( compareCallback( firstElement, secondElement ) )
说明:
compareCallback( firstElement, secondElement ) 是传入 sort() 的比较回调函数,用来指定按自定义的某种顺序进行排列的函数。不传时,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
firstElement 第一个用于比较的元素。
secondElement 第二个用于比较的元素。
compareCallback( firstElement, secondElement ) 小于0时,升序
compareCallback( firstElement, secondElement ) 等于0时,位置不变
compareCallback( firstElement, secondElement ) 大于0时,降序
三、示例
1、比较数字数组
let numArr = [ 12, 32, 11, 45, 7, 0, 28 ]
let sortedNumArr1 = numArr.sort()
console.log( sortedNumArr1 ) // 输出结果:[0, 11, 12, 28, 32, 45, 7] // 排序错误
上面用默认排序来排列数字数组时,是将元素转为字符串进行比较的,所以会出现排序错误。
let sortedNumArr2 = numArr.sort( ( first, second ) => first - second )
console.log( sortedNumArr2 ) // 输出结果:[0, 11, 12, 28, 32, 45, 7] // 排序正确
2、比较字符串数组
let strArr = [ 'LinLiu', 'HuangWu', 'ZhaoQi', 'zhongli', 'a' ]
let sortedStrArr1 = strArr .sort()
console.log( sortedStrArr1 ) // 输出结果:['HuangWu', 'LinLiu', 'ZhaoQi', 'a', 'zhongli']
忽略大小写比较
let sortedStrArr2 = strArr .sort(( first, second ) => {
// 统一转为大写进行比较
let firstName = first.toUpperCase()
let secondName = second .toUpperCase()
if ( firstName < secondName ) return -1
if ( firstName > secondName ) return 1
return 0
} )
console.log( sortedStrArr2 ) // 输出结果:['a', 'HuangWu', 'LinLiu', 'ZhaoQi', 'zhongli']