JS中對象按屬性排序(冒泡排序)


排序方法一、

在實際工作經常會出現這樣一個問題:后台返回一個數組中有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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM