日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

js几种数组排序及sort的实现

發(fā)布時(shí)間:2023/12/15 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 js几种数组排序及sort的实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

給出以下數(shù)組,并進(jìn)行排序處理

var arr = new Array('1','3','8','2','3','5');

1、 插入法排序

Array.prototype.csSort = function() {
    var newarr = this;
    /** 1、 插入法排序
    * 插入發(fā)排序,即那數(shù)組的后邊一項(xiàng)和前面一項(xiàng)對(duì)比,如果后面一項(xiàng)小于前面
    * 一項(xiàng),則將兩者位置互換,從數(shù)組第2個(gè)元素開(kāi)始對(duì)比;如下示例
    */
    for (let i = 1; i < newarr.length; i++) {
        for (let j = i; j > 0; j--) {
            if (newarr[j] < newarr[j-1]) {
                let pre = newarr[j];
                newarr[j] = newarr[j-1];
                newarr[j-1] = pre;
            };
        };
    };
    return newarr;
}
console.log(arr.csSort().toString());

2、 冒泡法排序

Array.prototype.csSort = function() {
    var newarr = this;
    /** 2、 冒泡法排序
    * 插入發(fā)排序,即那數(shù)組的前一項(xiàng)和后一項(xiàng)對(duì)比,如果前面一項(xiàng)小于后面
    * 一項(xiàng),則將兩者位置互換,從數(shù)組第1個(gè)元素開(kāi)始對(duì)比;如下示例
    */
    for (let i = 0; i < newarr.length; i++) {
        for (let j = 0; j < newarr.length; j++) {
            if (newarr[j] > newarr[j+1]) {
                let pre = newarr[j];
                newarr[j] = newarr[j+1];
                newarr[j+1] = pre;
            };
        };
    };
    return newarr;
}
console.log(arr.csSort().toString());

sort排序的實(shí)現(xiàn)原理

js中sort排序方法使用簡(jiǎn)單,用于對(duì)數(shù)組排序,并返回?cái)?shù)組,使用方法也很簡(jiǎn)單

Array.sort()

可以看出sort是一個(gè)方法,該方法內(nèi)部對(duì)該數(shù)組對(duì)象進(jìn)行一些操作,又返回來(lái)一個(gè)數(shù)組,不傳參數(shù)的話排序默認(rèn)根據(jù)字符串的Unicode排序

如下代碼:

1 var arr = new Array('1','3','8','55','2','3','5','66');
2 arr = arr.sort();
3 console.log(arr.toString())
4 // 1,2,3,3,5,55,66,8

可以看到上面的輸出結(jié)果并沒(méi)有按照大小進(jìn)行排列,所以這種情況就需要往sort里傳入一個(gè)參數(shù)

Array.sort(func);

傳遞參數(shù)這種情況所傳的參數(shù)必須為一個(gè)函數(shù),該函數(shù)對(duì)a,b兩個(gè)參數(shù)進(jìn)行比較,返回一個(gè)結(jié)果,具體如下

a 大于 b 返回一個(gè)大于0的值,a在b位置的后面

a 等于 b 返回一個(gè)等于0的值,a、b位置不變

a 小于 b 返回一個(gè)小于0的值,a在b位置的前面

如下代碼

1 var arr = new Array('1','3','8','55','2','3','5','66');
2 function compare(a, b) {
3     return a - b;
4 }
5 arr = arr.sort(compare);
6 console.log(arr.toString())
7 // 1,2,3,3,5,8,55,66

當(dāng)compare函數(shù)里返回a-b的時(shí)候,可以看到是升序排列,再看以下降序

var arr = new Array('1','3','8','55','2','3','5','66');
function compare(a, b) {
    return b - a;
}
arr = arr.sort(compare);
console.log(arr.toString())
// 66,55,8,5,3,3,2,1

對(duì)于對(duì)象的處理也是如此

var arr = [
    {name:"zhangsan", age: 21},
    {name:"lisi", age: 23},
    {name:"wangwu", age: 20},
    {name:"zhaoliu", age: 18},
    {name:"xiaoming", age: 17},
    {name:"xiaolan", age: 25}
]
function compare(arg) {
    return function(a, b) {
        return a[arg] - b[arg];
    }
}
arr = arr.sort(compare('age'));
console.log(arr)

結(jié)果為

可以根據(jù)對(duì)象的某一個(gè)屬性進(jìn)行排序

sort的使用方法是很簡(jiǎn)單,究其原理感覺(jué)內(nèi)部是冒泡排序的原理,通過(guò)對(duì)相鄰的兩個(gè)元素對(duì)比,如果前面的必后面的小,則位置不變,反之則替換位置,其原理可參考上面提到過(guò)的冒泡排序原理。

總結(jié)

以上是生活随笔為你收集整理的js几种数组排序及sort的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。