/**
@param {function} [compareFn]
@return {Array.<T>}
*/
Array.prototype.sort = function(compareFn) {}
/**
* Sorts an array.
* @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order.
*/
sort(compareFn?: (a: T, b: T) => number): T[];
可以看到該函數(shù)的參數(shù)是一個(gè)函數(shù)如果不傳入?yún)?shù)或者參數(shù)不是一個(gè)函數(shù)那么該函數(shù)最多可以升序排列10個(gè)以內(nèi)的數(shù)
var arr = [2, 412, 3213, 22, 122,222,222,2277,22898,22423432,2,9];
arr.sort();
傳入的是兩個(gè)參數(shù)返回值是number類型的函數(shù)
arr.sort(function (a, b) {
return a - b;
});
如果 return a- b就是求升序:因?yàn)?如果a-b大于0那么交換a和b的位置因此為升序
如果return b-a那就是降序:因?yàn)槿绻鸼-a大于0那么交換a和b的位置因此是降序
如果返回值是例如 return 1那么僅僅只是將數(shù)組進(jìn)行了逆序排列相當(dāng)于 reverse
如果返回值是如果 return <=0的數(shù)那么保持不變
函數(shù)內(nèi)部會(huì)多次進(jìn)行比較可能使用了冒泡插入等排序規(guī)則
二維數(shù)組的比較
var arr = [
{name:'小二',age:18},
{name:'小222',age:13},
{name:'小33',age:23},
];
arr.sort(function (a,b) {
// 以年齡排序
return parseFloat(a.age) - parseFloat(b.age);
});
console.log(arr);
// 比較漢字字符串排序用localcompare函數(shù)
var arr = [
{name: '小二', age: 18},
{name: '小222', age: 13},
{name: '小33', age: 23},
];
arr.sort(function (a, b) {
return a.name.localeCompare(b.name);
});
console.log(arr);