快速实现数组排序sort

842 阅读1分钟

快速实现排序sort

arr.sort([compareFunction])

1. 如果未指明compareFunction函数,直接写arr.sort(),会自动按照每个元素转换为的字符串的Unicode编码值进行排序(用于字符串排序)

2. 如果指明compareFunction函数,则比较的是数字而非字符串

compareFunction(a,b)有两个参数,如果返回的是a-b则是升序如果返回的是b-a则是降序

例题

let array1 = [32, 34, 1, 6, 45, 54, 3, 7, 5, 4];
array1.sort();
// sort()默认
// 未指明compareFunction,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序
console.log(array1);   // [1, 3, 32, 34, 4, 45, 5, 54, 6, 7]
​
array1.sort((a, b) => a - b)
console.log(array1)    // [1, 3, 4, 5, 6, 7, 32, 34, 45, 54]
​
array1.sort((a, b) => b - a)
console.log(array1)       //  [54, 45, 34, 32, 7, 6, 5, 4, 3, 1]

3. 数组是个对象,对对象的值进行排序

按age(数值)

let array2 = [{ name: 'lk', age: 23 }, { name: 'zy', age: 15 }, { name: 'ij', age: 27 }, { name: 'er', age: 13 }]
array2.sort(function (a, b) {
    return (a.age - b.age)    // 依据age排序,一定要return
})
console.log(array2)

结果

image.png

按name(字符串)

let array2 = [{ name: 'lk', age: 23 }, { name: 'zy', age: 15 }, { name: 'ij', age: 27 }, { name: 'er', age: 13 }]
array2.sort(function (a, b) {
    if (a.name > b.name) {     // < 就是降序
        return 1;   //return的值大于0 就返回正序  小于0就是降序
    } else {
        return -1; 
    }
})
console.log(array2)

结果

image.png