Javascript 數(shù)組排序詳解
如果你接觸javascript有一段時(shí)間了,你肯定知道數(shù)組排序函數(shù)sort,sort是array原型中的一個(gè)方法,即array.prototype.sort(),sort(compareFunction),其中compareFunction是一個(gè)比較函數(shù),下面我們看看來自Mozilla MDN 的一段描述:
If compareFunction is not supplied, elements are sorted by converting them to strings and comparing strings in lexicographic (“dictionary” or “telephone book,” not numerical) order. For example, “80″ comes before “9″ in lexicographic order, but in a numeric sort 9 comes before 80.
下面看些簡單的例子:
// Output [1, 2, 3]
console.log([3, 2, 1].sort());
// Output ["a", "b", "c"]
console.log(["c", "b", "a"].sort());
// Output [1, 2, "a", "b"]
console.log(["b", 2, "a", 1].sort());
從上例可以看出,默認(rèn)是按字典中字母的順序來排序的。
幸運(yùn)的是,sort接受一個(gè)自定義的比較函數(shù),如下例:
function compareFunction(a, b) {
if( a > b) {
return -1;
}else if(a < b) {
return 1;
}else {
return 0;
}
}
//Outputs ["zuojj", "Benjamin", "1"]
console.log(["Benjamin", "1", "zuojj"].sort(compareFunction));
排序完我們又有個(gè)疑問,如何控制升序和降序呢?
function compareFunction(flag) {
flag = flag ? flag : "asc";
return function(a, b) {
if( a > b) {
return flag === "desc" ? -1 : 1;
}else if(a < b) {
return flag === "desc" ? 1 : -1;
}else {
return 0;
}
};
}
//Outputs ["1", "Benjamin", "zuojj"]
console.log(["Benjamin", "1", "zuojj"].sort(compareFunction()));
//Outputs ["zuojj", "Benjamin", "1"]
console.log(["Benjamin", "1", "zuojj"].sort(compareFunction("desc")));
comparFunction的排序規(guī)則是這樣的:
1.If it returns a negative number, a will be sorted to a lower index in the array.
2.If it returns a positive number, a will be sorted to a higher index.
3.And if it returns 0 no sorting is necessary.
下面我們來看看摘自Mozilla MDN上的一段話:
The behavior of the sort method changed between JavaScript 1.1 and JavaScript 1.2.為了解釋這段描述,我們來看個(gè)例子:
In JavaScript 1.1, on some platforms, the sort method does not work. This method works on all platforms for JavaScript 1.2.
In JavaScript 1.2, this method no longer converts undefined elements to null; instead it sorts them to the high end of the array.詳情請(qǐng)戳這里。
var arr = [];
arr[0] = "Ant";
arr[5] = "Zebra";
//Outputs ["Ant", 5: "Zebra"]
console.log(arr);
//Outputs 6
console.log(arr.length);
//Outputs "Ant*****Zebra"
console.log(arr.join("*"));
//排序
var sortArr = arr.sort();
//Outputs ["Ant", "Zebra"]
console.log(sortArr);
//Outputs 6
console.log(sortArr.length);
//Outputs "Ant*Zebra****"
console.log(sortArr.join("*"));
希望本文對(duì)你學(xué)習(xí)和了解sort()方法有幫助,文中不妥之處還望批評(píng)斧正。
參考鏈接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
相關(guān)文章
JavaScript基本概念初級(jí)講解論壇貼的學(xué)習(xí)記錄
JavaScript基本概念 論壇貼建議大家看下,都是一些js的高級(jí)的技巧知識(shí)小結(jié)。2009-02-02document.getElementById獲取控件對(duì)象為空的解決方法
今天寫個(gè)網(wǎng)頁,想在頁面加載onLoad時(shí),動(dòng)態(tài)顯示由后臺(tái)其他程序傳來的數(shù)據(jù)時(shí),用document.getElementById獲取控件對(duì)象總是為空。但是檢查了這個(gè)id確實(shí)是存在的??聪挛牡氖纠徒鉀Q方法2013-11-11JavaScript CSS修改學(xué)習(xí)第一章 查找位置
在這一章我會(huì)給出查找頁面上的元素位置的代碼。他能幫助你找到真正的位置,假如你改變了窗口的尺寸,然后再次運(yùn)行代碼,也會(huì)告訴你新的位置。2010-02-02淺談Web頁面向后臺(tái)提交數(shù)據(jù)的方式和選擇
下面小編就為大家?guī)硪黄獪\談Web頁面向后臺(tái)提交數(shù)據(jù)的方式和選擇。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09