JavaScript sort數(shù)組排序方法和自我實(shí)現(xiàn)排序方法小結(jié)
前言
針對(duì)一個(gè)數(shù)組進(jìn)行排序,一個(gè)很常見的需求.尤其在后端.當(dāng)然,前端也是有這個(gè)需求的.
當(dāng)然,數(shù)組排序,是有現(xiàn)成的方法的.就是sort()方法.
我們先開看下這個(gè).
標(biāo)準(zhǔn)答案,sort方法
var arr = [45,98,67,57,85,6,58,83,48,18]; console.log('原數(shù)組'); 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}));
運(yùn)行結(jié)果如下:
這里需要注意的是,sort默認(rèn)是按照字母順序來(lái)進(jìn)行排序的.因此,我們?cè)谂帕袛?shù)字的時(shí)候,需要一個(gè)自定義函數(shù).
如上面的代碼
function(a,b){return a-b}
這就是一個(gè)從小到大的排序函數(shù).看上去好簡(jiǎn)單的樣子,但是我不理解,所以,我根據(jù)我的想法,來(lái)實(shí)現(xiàn)排序吧~
我的答案,for方法排序
var arr = [45,98,67,57,85,6,58,83,48,18]; console.log('原數(shù)組'); console.log(arr); console.log('for方法從小到大排序'); console.log(arrSortMinToMax(arr)); console.log('for方法從大到小排序'); console.log(arrSortMaxToMin(arr)); // 找數(shù)組中最小的值 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}; } // 返回?cái)?shù)組從小到大排序結(jié)果 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); } // 找數(shù)組中最大的值 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}; } // 返回?cái)?shù)組從大到小排序結(jié)果 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); }
運(yùn)行結(jié)果如下圖所示
我的方法中的知識(shí)點(diǎn)
1.當(dāng)一個(gè)函數(shù)需要返回多條數(shù)據(jù)的時(shí)候,使用json對(duì)象格式比較方便.如上面的return {"minNum":minNum,"index":index};
2.如果使用 var arrOld = arr 這種方法來(lái)復(fù)制一個(gè)數(shù)組,并且,對(duì)arrOld進(jìn)行操作的話,是會(huì)影響到arr這個(gè)原數(shù)組的.因?yàn)閖avascript分原始類型與引用類型(與java、c#類似)。Array是引用類型。arrOld得到的是引用,所以對(duì)arrOld的修改會(huì)影響到arr。
復(fù)制數(shù)組的方法(一)var arrOld = arr.concat(); ,原理:concat()函數(shù)是用于拼接多個(gè)數(shù)組的函數(shù),這種寫法相當(dāng)于拼接自己.也就是復(fù)制了.
復(fù)制數(shù)組的方法(二)var arrOld = arr.slice(0) , 原理:slice()函數(shù)是一個(gè)截取數(shù)組的函數(shù),設(shè)置值為0,則是全部截取,相當(dāng)于復(fù)制了.
3.splice()方法用于插入、刪除或替換數(shù)組的元素。這里是使用了其刪除數(shù)組中指定位置的特性.
4.我的方法和sort方法的差異.
我的方法沒(méi)有修改原數(shù)組,而sort是在原數(shù)組的基礎(chǔ)上進(jìn)行的修改.
我的方法返回的是一個(gè)新數(shù)組,原數(shù)組并沒(méi)有消失或者改變.(好像和上面一句是一個(gè)意思….)
5.排序是編程中非常非?;A(chǔ)并且非常非常重要的知識(shí)點(diǎn).sort排序在執(zhí)行大量數(shù)據(jù)的情況下,效率還是比較低的.當(dāng)然,我的方法的效率也是很低的.
本文轉(zhuǎn)載于:http://blog.csdn.net/fungleo/article/details/51555590
以上所述是小編給大家介紹的JavaScript sort數(shù)組排序方法和自我實(shí)現(xiàn)排序方法小結(jié)的全部?jī)?nèi)容,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的,在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持。
- Js數(shù)組排序函數(shù)sort()介紹
- JS數(shù)組排序技巧匯總(冒泡、sort、快速、希爾等排序)
- js sort 二維數(shù)組排序的用法小結(jié)
- js中數(shù)組排序sort方法的原理分析
- javascript 數(shù)組排序函數(shù)sort和reverse使用介紹
- JavaScript數(shù)組排序reverse()和sort()方法詳解
- JavaScript自定義數(shù)組排序方法
- JavaScript對(duì)象數(shù)組排序函數(shù)及六個(gè)用法
- javascript 數(shù)組排序與對(duì)象排序的實(shí)例
- JavaScript對(duì)象數(shù)組排序?qū)嵗椒\析
- JS簡(jiǎn)單數(shù)組排序操作示例【sort方法】
相關(guān)文章
javascript模擬實(shí)現(xiàn)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了javascript模擬實(shí)現(xiàn)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04Bootstrap模態(tài)框插入視頻的實(shí)現(xiàn)代碼
這篇文章主要介紹了Bootstrap模態(tài)框插入視頻的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-06-06js遍歷json對(duì)象所有key及根據(jù)動(dòng)態(tài)key獲取值的方法(必看)
下面小編就為大家?guī)?lái)一篇js遍歷json對(duì)象所有key及根據(jù)動(dòng)態(tài)key獲取值的方法(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03基于JavaScript實(shí)現(xiàn)無(wú)縫滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)無(wú)縫滾動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07JavaScript檢測(cè)是否開啟了控制臺(tái)(F12調(diào)試工具)
通過(guò)js來(lái)檢測(cè)開發(fā)者工具是否打開,防止別人惡意調(diào)試我們的代碼,最近我發(fā)現(xiàn)還是有蠻多人去瀏覽那篇文章,所以這里再放出一段代碼,算是個(gè)升級(jí)版吧2020-10-10javascript 數(shù)組(list)添加/刪除的實(shí)現(xiàn)
這篇文章主要介紹了javascript 數(shù)組(list)添加/刪除,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12JavaScript?ECMAScript?6(ES2015~ES2022)所有新特性總結(jié)
這篇文章主要介紹了JavaScript?ECMAScript?6(ES2015~ES2022)所有新特性總結(jié),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07