最近的項目開發(fā)中用到了數(shù)組的排序,想著將平時遇到的問題整理下來骗露,算是一種積累岭佳,閑話少敘,開始正題:
sort() 方法用于對數(shù)組元素進(jìn)行排序萧锉,并返回數(shù)組珊随,默認(rèn)排序是根據(jù)字符串的Unicode碼點
語法:arrayObject.sort(sortby),其中sortby可選,規(guī)定數(shù)組排序順序叶洞,必須是函數(shù)
注:如果調(diào)用該方法時沒有使用參數(shù)鲫凶,將按照字母順序?qū)?shù)組中的
元素進(jìn)行排序,說的更精確一些衩辟,是按照字符編碼的順序進(jìn)行排序螟炫,要實現(xiàn)這一點,首先應(yīng)該把數(shù)組的元素都轉(zhuǎn)換成字符串艺晴,以便進(jìn)行比較昼钻。
如果想要按照其它的標(biāo)準(zhǔn)進(jìn)行排序,就需要提供比較函數(shù)封寞,該函數(shù)要比較兩個值然评,然后返回一個用于說明這兩個值的相對順序的數(shù)字,比較函數(shù)應(yīng)該具有兩個參數(shù)a,b 其返回值如下:
(1)若a小于b ,在排序后的數(shù)組中a 應(yīng)該出現(xiàn)在b之前狈究,則返回一個小于0的值
(2)若a等于b,則返回0
(3)若a大于b,則返回一個大于0的值
1碗淌、我們舉一個栗子~~~:
var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"
document.write(arr + "<br />")
document.write(arr.sort())
輸出:
George,John,Thomas,James,Adrew,Martin
Adrew,George,James,John,Martin,Thomas
2、我們再舉一個栗子~~~:
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort())
輸出:
10,5,40,25,1000,1
請注意抖锥,上面的代碼沒有按照數(shù)值的大小對數(shù)字進(jìn)行排序亿眠,要實現(xiàn)這一點,就必須使用一個排序函數(shù):
function sortNumber(a, b) {
console.log(a);
console.log(b);
return a - b
}
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort(sortNumber))
這里可以看出磅废,如果按照升序排列纳像,那么方法為:
function sortNumber(a, b) {
return a - b
}
如果是按照降序排列則為:
function sortNumber(a, b) {
return b - a
}
當(dāng)然如果想根據(jù)數(shù)組對象中的某個屬性值進(jìn)行排序呢?
sort方法接收一個函數(shù)作為參數(shù)还蹲,這里嵌套一層函數(shù)用來接收對象屬性名爹耗,
其他部分代碼與正常使用sort方法相同。
var arr = [
{ name: 'zopp', age: 0 },
{ name: 'gpp', age: 18 },
{ name: 'yjj', age: 8 }
];
function compare(property) {
return function(a, b) {
var value1 = a[property];
var value2 = b[property];
return value1 - value2;
}
}
console.log(JSON.stringify(arr.sort(compare('age'))))
輸出:
[{"name":"zopp","age":0},{"name":"yjj","age":8},{"name":"gpp","age":18}]
如何根據(jù)參數(shù)不同谜喊,來確定是升序排列潭兽,還是降序排序呢?
var sortBy = function(attr, rev) {
//第二個參數(shù)沒有傳遞 默認(rèn)升序排列
if (rev == undefined) {
rev = 1;
} else {
rev = (rev) ? 1 : -1;
}
return function(a, b) {
a = a[attr];
b = b[attr];
if (a < b) {
return rev * -1;
}
if (a > b) {
return rev * 1;
}
return 0;
}
}
使用方式:
newArray.sort(sortBy('number', false))