排序方法一、
在實際工作經常會出現這樣一個問題:后台返回一個數組中有i個json數據,需要我們根據json中某一項進行數組的排序。
例如返回的數據結構大概是這樣:
{ result:[ {id:1,name:'中國銀行'}, {id:3,name:'北京銀行'}, {id:2,name:'河北銀行'}, {id:10,name:'保定銀行'}, {id:7,name:'淶水銀行'} ] }
現在我們根據業務需要,要根據id的大小進行排序,按照id小的json到id大的json順序重新排列數組的順序
在js中添加排序的方法:
這里使用JavaScript sort() 方法,首先解釋下這個sort的方法
語法:arrayObject.sort(sortby) sortby:可選,規定排序順序。必須是函數。
如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字符串(如有必要),以便進行比較。
如果想按照其他標准進行排序,就需要提供比較函數,該函數要比較兩個值,然后返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
- 若 a 小於 b,在排序后的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
- 若 a 等於 b,則返回 0。
- 若 a 大於 b,則返回一個大於 0 的值。
下面開始使用sort(sortby) 來進行這個排序,並打印到控制台:
1 function sortId(a,b){ 2 return a.id-b.id 3 } 4 result.sort(sortId); 5 console.log(result);
然后查看控制台,排序成功:

如果對比的對象有相同的屬性 則添加id屬性到新對象上。
1 arraySort(){ 2 3 function com(oldV,newV){ 4 for(var i=0;i<newV.length;i++){ 5 if(newV.nav_name == oldV.nav_name){ 6 newV[i].id = oldV[i].id 7 } 8 } 9 } 10 function sortId(a,b){ 11 return a.id-b.id 12 } 13 console.log(this.urlList); 14 console.log('○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○'); 15 com(this.compare,this.urlList) 16 this.urlList.sort(sortId); 17 this.happyList = this.urlList 18 }
需求: 每一個添加的路由按順序排列。 最終解決辦法: 冒泡排序

1 threeList:["實時狀況","基礎數據","GPU實時統計","主機掃描","設備列表","主機列表","模板列表","存儲空間列表","價格列表","服務列表","工單列表","創建工單","AI源碼列表","發票管理","收入管理","支持管理","系統贈送","用戶列表","微信用戶列表","推廣申請","提現申請","推廣信息列表","折扣列表","活動列表","公告列表","角色列表","權限列表","角色管理", 2 "GPU租用總量總計","GPU利用率統計","GPU使用分時統計","租用量分析","租憑費分析","用戶增長統計","用戶注冊時間分布","用戶活躍量統計","用戶屬性統計","用戶排行榜","網站訪問統計","省份人數分布","城市人數分布","學校人數分布","用戶 GPU 利用率排行榜","使用時長統計","消費類型統計","服務市場購買統計","消費券使用記錄","AI源碼用戶購買列表","用戶充值額統計","用戶充值渠道統計","收支對比","收入統計","支出統計"] 3
給數據添加序號,不用一個一個的添加 這里使用 array.indexOf
x.ind =this.threeList.indexOf(this.removeAllSpace(x.nav_name))
//(雙重for循環 第一個for控制輪數 第二個for控制次數 比較的輪數為數據個數-1 一輪比較的次數為數據個數-1 總個數為比較輪數*1輪比較次數)
for(var i=0; i<=this.urlList.length-2;i++ ){ for(var j=i+1; j<=this.urlList.length-1;j++){ if(this.urlList[j].ind <this.urlList[i].ind){ var num =this.urlList[j]; this.urlList[j] = this.urlList[i] this.urlList[i] = num } } }
(固定寫法)
排序方法二、
var newArray = [{ name: "aaa", value: 0 }, { name: "ddd", value: 3 }, { name: "bbb", value: 1 }, { name: "eee", value: 4 }, { name: "ccc", value: 2 }]; function compare(property) { return function (a, b) { var value1 = a[property]; var value2 = b[property]; return value1 - value2; } } console.log(newArray.sort(compare("value")))
三、數組排序
從小到大排序
const minSort = (arr) => { let newArr = arr.sort((a,b)=>{ return a - b }) return newArr }
從大到小排序
const maxSort = (arr) => { let newArr = arr.sort((a,b)=>{ return b - a }) return newArr }
四 根據對象的value值排序
function objsortbyval(obj) { var keyArr = [],valArr = []; for (var key in obj) { keyArr.push(key); valArr.push(obj[key]); } for (var i = 0, len = valArr.length; i < len; i++) { for (var j = 0; j < len - i; j++) { var keyTemp, valTemp; if (valArr[j] < valArr[j + 1]) { valTemp = valArr[j]; valArr[j] = valArr[j + 1]; valArr[j+1] = valTemp; keyTemp = keyArr[j]; keyArr[j] = keyArr[j + 1]; keyArr[j+1] = keyTemp; } } } var newobj={}; for(var i=0;i<valArr.length;i++){ newobj['"'+keyArr[i]+'"']=valArr[i]; } console.log(newobj); } var obj = { "apple": 124, "banana": 23, "melon": 19, "pear": 100, "orange": 68 }; objsortbyval(obj);
