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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

JavaScript数组内置排序函数

發(fā)布時(shí)間:2023/12/10 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript数组内置排序函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

javascript內(nèi)置的sort函數(shù)是多種排序算法的集合

JavaScript實(shí)現(xiàn)多維數(shù)組對(duì)象數(shù)組排序,其實(shí)用的就是原生的sort()方法,用于對(duì)數(shù)組的元素進(jìn)行排序。

sort() 方法用于對(duì)數(shù)組的元素進(jìn)行排序。語(yǔ)法如下:

?? ArrayObject.sort(order);
??測(cè)試A:?? ? ? ?? ? ? ?var mm=[1,4,0,6,3,1,2]; mm.sort(); alert(mm);//0 1 1 2 3 4 6?

返回值為對(duì)數(shù)組的引用。請(qǐng)注意,數(shù)組在原數(shù)組上進(jìn)行排序,不生成副本

如果調(diào)用該方法時(shí)沒(méi)有使用參數(shù),將按字母順序?qū)?shù)組中的元素進(jìn)行排序,說(shuō)得更精確點(diǎn),是按照字符編碼的順序進(jìn)行排序。要實(shí)現(xiàn)這一點(diǎn),首先應(yīng)把數(shù)組的元素都轉(zhuǎn)換成字符串(如有必要),以便進(jìn)行比較。

如果想按照其他標(biāo)準(zhǔn)進(jìn)行排序,就需要提供比較函數(shù),該函數(shù)要比較兩個(gè)值,然后返回一個(gè)用于說(shuō)明這兩個(gè)值的相對(duì)順序的數(shù)字。比較函數(shù)應(yīng)該具有兩個(gè)參數(shù) a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的數(shù)組中 a 應(yīng)該出現(xiàn)在 b 之前,則返回一個(gè)小于 0 的值。
  • 若 a 等于 b,則返回 0。a,b視為相等
  • 若 a 大于 b,則返回一個(gè)大于 0 的值。b應(yīng)該排在a的后面

測(cè)試B: function NumAscSort(a,b) { return a-b; } function NumDescSort(a,b) { return b-a; } var arr = new Array( 1, 2, 3, 4);? arr.sort(NumDescSort); alert(arr);//4 3 2 1 arr.sort(NumAscSort); alert(arr);// 1 2 3 4 比較字符數(shù)組 測(cè)試C: var myarray=["Apple", "Banana", "Orange"] myarray.sort() alert(myarray);//Apple ?Banana ?Orange 數(shù)組直接調(diào)用sort()后,數(shù)組按字母順序?qū)?shù)組中的元素進(jìn)行排序,說(shuō)得更精確點(diǎn),是按照字符編碼的順序進(jìn)行排序 對(duì)于對(duì)象數(shù)組排序,我們先寫(xiě)一個(gè)構(gòu)造比較函數(shù)的函數(shù)

//by函數(shù)接受一個(gè)成員名字符串做為參數(shù)
//并返回一個(gè)可以用來(lái)對(duì)包含該成員的對(duì)象數(shù)組進(jìn)行排序的比較函數(shù)
var by = function(name)
{
return function(o, p)
{
var a, b;
if (typeof o === "object" && typeof p === "object" && o && p)
{
a = o[name];
b = p[name];
if (a === b) {return 0;}
if (typeof a === typeof b) { return a < b ? -1 : 1;}
return typeof a < typeof b ? -1 : 1;
}
else {throw ("error"); }
}
}
var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
employees.sort(by("age"));
alert(employees);

到這里,對(duì)象數(shù)組排序就算基本實(shí)現(xiàn)了。那如何實(shí)現(xiàn)多個(gè)鍵值排序呢?意思就是先是對(duì)age排序,如果age相同,再比較name。

這時(shí),我們可以進(jìn)一步修改by函數(shù),讓其可以接受第二個(gè)參數(shù),當(dāng)主要的鍵值產(chǎn)生一個(gè)匹配的時(shí)候,另一個(gè)compare方法將被調(diào)用以決出高下。

//by函數(shù)接受一個(gè)成員名字符串和一個(gè)可選的次要比較函數(shù)做為參數(shù)
//并返回一個(gè)可以用來(lái)包含該成員的對(duì)象數(shù)組進(jìn)行排序的比較函數(shù)
//當(dāng)o[age] 和 p[age] 相等時(shí),次要比較函數(shù)被用來(lái)決出高下

var by = function(name,minor)
{
return function(o, p)
{
var a, b;
if (typeof o === "object" && typeof p === "object" && o && p)
{
a = o[name];
b = p[name];
if (a === b) {return typeof minor==='function' ?minor(o,p):0;}
if (typeof a === typeof b) { return a < b ? -1 : 1;}
return typeof a < typeof b ? -1 : 1;
}
else {throw ("error"); }
}
}
var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
employees.sort(by('age',by('name')));
alert(employees);

轉(zhuǎn)載于:https://www.cnblogs.com/kycool/archive/2011/10/25/2223473.html

總結(jié)

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

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