Javascript數組(一)排序

1、簡介
首先,咱們來看一下JS中sort()和reverse()這兩個函數的函數吧
reverse();這個函數是用來進行倒序,這個沒有什麼可說的,所謂倒序就是大的在前面,小的在後面。json

  好比:數組

  var array1 = [0,1,5,10,15];app

  array1.reverse();//結果爲:15,10,5,1,0函數

    sort([參數]);這個函數是用來對數組進行正序排列的,spa

  var array1 = [0,1,5,10,15];指針

  array1.sort();//結果爲:0,1,10,15,5對象

  注:sort() 方法能夠接受一個 方法爲參數 ,這個方法有兩個參數。分別表明每次排序比較時的兩個數組項。sort()排序時每次比較兩個數組項都回執行這個參數,並把兩個比較的數組項做爲參數傳遞 給這個函數。當函數返回值爲1的時候就交換兩個數組項的順序,不然就不交換。排序

有時候,咱們你們在進行排序,尤爲是數組排序。有可能,咱們只是想去排列一組數據中的某一個數據的時候。以下面的這個例子。ip

  var data = [{name:"Tom",age:"28"},{name:"Cat",age:"29"}...];ci

咱們只是想對這組數據中的name或age進行排序,這個時候你們就會發現,使用JS中的自代的函數sort()就不能解決這類型的問題。哪麼此篇文章就是解決這個問題?

在簡述一下此問題:假設有一個對象數組,咱們想要根據某個對象屬性對數組進行排序。而傳遞給數組sort()方法的比較函數要接收兩個參數,這兩個參數就是比較的值。但是,咱們須要一種方式來指明按照哪一個屬性來排序。而sort()方法只能接受一個參數,這個時候,咱們就能夠利用一下JS自定義函數的特色來作。好吧,咱們來看下。

   看到上圖,你們可能有點懵,這個函數定義看起來有點複雜,但實際上無非就是在這個函數的內部嵌套了另外一函數,並且,這個內部的函數前面加了一個return操做符。在內部函數接收到pName參數後,使用方括號(能夠看做數組取值)表示法來取得指定屬性的值。那麼,這裏你們可能有點不明白,就是咱們上篇文章在講解的時候,明明sort在傳遞的參數只是一個不帶參數的函數。這裏咱們能夠回顧一下,JS函數的相關定義:要訪問函數的指針而不執行函數的話,必須去掉函數後面的哪對圓括號。而且,ECMAscript中的函數名自己就是變量,因此函數也能夠做爲值來使用。也就是說,不只能夠像傳遞參數把同樣把一個函數函數傳遞給另外一個函數,並且能夠將一個函數做爲另外一個函數的結果返回。


2、數字數組

1.默認ASCII字符順尋

$(function () {
//Javascript數組排序
var nums = [8, 10, 2, 3, 1,100];
//默認ASII字符排序,升序
nums.sort();

//將默認ASCII字符排序反轉
nums.reverse();

//遍歷輸出
for (var i = 0; i < nums.length; i++) {
$("#orderUl").append("<li>"+nums[i]+"</li>");;
}
});

<ul id="orderUl"></ul>

 ascii升序顯示結果:   ascii降序顯示:
 
Javascript數組排序 - 天馬hygj - Nothing
 
Javascript數組排序 - 天馬hygj - Nothing

    
2.數字數組升序和降序

$(function () {
//Javascript數組排序
var nums = [8, 10, 2, 3, 1,100];
//升序排列
nums.sort(function (a, b) {
return a > b ? 1 : -1;
});

//降序排列
nums.sort(function (a,b) {
return a < b ? 1 : -1;
});

//遍歷輸出
for (var i = 0; i < nums.length; i++) {
$("#orderUl").append("<li>"+nums[i]+"</li>");;
}
});

 升序排列:  降序排列:
Javascript數組排序 - 天馬hygj - Nothing
 
Javascript數組排序 - 天馬hygj - Nothing


三。混合數組

//混合數組
var nums = ['a', 10, 'w', '2',100, 'b','array'];
nums.sort();//按ascii字符順序排序
//升序排序,順序打亂
nums.sort(function (a, b) {
return a > b ? 1 : -1;
});

//遍歷輸出
for (var i = 0; i < nums.length; i++) {
$("#orderUl").append("<li>"+nums[i]+"</li>");;
}

 Asciii升序  按大小升序
 
Javascript數組排序 - 天馬hygj - Nothing
 
Javascript數組排序 - 天馬hygj - Nothing

   
3、json數組

//josn數組
var nums = [
{ id:3,name: 'da', age: 25,remark:'a' },
{ id: 1, name: 'alla', age: 21, remark: 'd' },
{ id: 4, name: 'cs', age: 22, remark: 'b' },
{ id: 2, name: 'bs', age: 29, remark: 'c' },
];
nums.sort();//默認根據第一個字符串列按ascii字符順序排序
function orderBy(age) {//排序函數升序,調用時指定排序列
return function (object1, object2) {
var val1 = object1[age];
var val2 = object2[age];
if (val1 < val2) return -1;
else if (val1 > val2) return 1;
else return 0;
}
}
nums.sort(orderBy('age'));

//遍歷輸出
for (var i = 0; i < nums.length; i++) {
$("#orderUl").append("<li>" + nums[i].id + "--" + nums[i].name + "--" + nums[i].age + "--" + nums[i].remark + "</li>");;
}

 

 默認排序
 指定age排序
 指定remark排序
 
Javascript數組排序 - 天馬hygj - Nothing
 
Javascript數組排序 - 天馬hygj - Nothing
Javascript數組排序 - 天馬hygj - Nothing
默認根據json對象第一個字符串列按ascii排序
按age數字列升序
按reamark字符列排序
相關文章
相關標籤/搜索