javascript 數組排序sort方法和自我實現排序方法的學習小結 by FungLeo

來源:互聯網
上載者:User
前言

針對一個數組進行排序,一個很常見的需求.尤其在後端.當然,前端也是有這個需求的.

當然,數組排序,是有現成的方法的.就是sort()方法.

我們先開看下這個. 標準答案,sort方法

var arr = [45,98,67,57,85,6,58,83,48,18];console.log('原數組');console.log(arr);console.log('sort方法從小到大排序');console.log(arr.sort(function(a,b){return a-b}));console.log('sort方法從大到小排序');console.log(arr.sort(function(a,b){return b-a}));

運行結果如下:

這裡需要注意的是,sort預設是按照字母順序來進行排序的.因此,我們在排列數位時候,需要一個自訂函數.

如上面的代碼

function(a,b){return a-b}

這就是一個從小到大的排序函數.看上去好簡單的樣子,但是我不理解,所以,我根據我的想法,來實現排序吧~ 我的答案,for方法排序

var arr = [45,98,67,57,85,6,58,83,48,18];console.log('原數組');console.log(arr);console.log('for方法從小到大排序');console.log(arrSortMinToMax(arr));console.log('for方法從大到小排序');console.log(arrSortMaxToMin(arr));// 找數組中最小的值function arrMinNum(arr){    var minNum = Infinity, index = -1;    for (var i = 0; i < arr.length; i++) {        if (arr[i]<minNum) {            minNum = arr[i];            index = i;        }    };    return {"minNum":minNum,"index":index};}// 返回數組從小到大排序結果function arrSortMinToMax(arr){    var arrNew = [];    var arrOld = arr.concat();    for (var i = 0; i < arr.length; i++) {        arrNew.push(arrMinNum(arrOld).minNum);        arrOld.splice(arrMinNum(arrOld).index,1)    };    return (arrNew);}// 找數組中最大的值function arrMaxNum(arr){    var maxNum = -Infinity, index = -1;    for (var i = 0; i < arr.length; i++) {        if (arr[i]>maxNum) {            maxNum = arr[i];            index = i;        }    };    return {"maxNum":maxNum,"index":index};}// 返回數組從大到小排序結果function arrSortMaxToMin(arr){    var arrNew = [];    var arrOld = arr.slice(0);    for (var i = 0; i < arr.length; i++) {        arrNew.push(arrMaxNum(arrOld).maxNum);        arrOld.splice(arrMaxNum(arrOld).index,1);    };    console.log(arr)    return (arrNew);}

運行結果如下圖所示
我的方法中的知識點 當一個函數需要返回多條資料的時候,使用json對象格式比較方便.如上面的return {"minNum":minNum,"index":index}; 如果使用 var arrOld = arr 這種方法來複製一個數組,並且,對arrOld進行操作的話,是會影響到arr這個原數組的.因為javascript分原始類型與參考型別(與java、c#類似)。Array是參考型別。arrOld得到的是引用,所以對arrOld的修改會影響到arr。
複製數組的方法(一)var arrOld = arr.concat(); ,原理:concat()函數是用於拼接多個數組的函數,這種寫法相當於拼接自己.也就是複製了. 複製數組的方法(二)var arrOld = arr.slice(0) , 原理:slice()函數是一個截取數組的函數,設定值為0,則是全部截取,相當於複製了. splice()方法用於插入、刪除或替換數組的元素。這裡是使用了其刪除數組中指定位置的特性. 我的方法和sort方法的差異.
我的方法沒有修改原數組,而sort是在原數組的基礎上進行的修改. 我的方法返回的是一個新數組,原數組並沒有消失或者改變.(好像和上面一句是一個意思….) 排序是編程中非常非常基礎並且非常非常重要的知識點.sort排序在執行大量資料的情況下,效率還是比較低的.當然,我的方法的效率也是很低的.

本文由FungLeo原創,允許轉載.但轉載必須署名作者,並保留文章首發連結.否則將追究法律責任.
首發地址:http://blog.csdn.net/FungLeo/article/details/51555590

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.