2016-06-01 225 views
2

我有一個對象,我使用的是ng-repeat,但需要顯示可排序的合成項中的項目 如果多個項目的總值與排序的總值相同,應對總值進行排序應該根據p1的值來完成,如果p1與p2相同,並且如果p2也相同,那麼p3.i已經基於總值排序了對象,但是仍然優先考慮如何基於多個對象屬性進行排序?基於多個屬性根據優先級排序javascript對象

我已經做了基礎的價值和重點排序上,但需要幫助的這種複雜的情況

{ "QVC":{ 
      "p1":0, 
      "p2":12, 
      "p3":12, 
      "total":24, 
      "org":"QVC" 
     }, 
     "TURNER & TOWNSEND":{ 
      "p1":12, 
      "p2":12, 
      "p3":0, 
      "total":24, 
      "org":"TURNER & TOWNSEND" 
     }, 
     "EDF ENERGY":{ 
      "p1":12, 
      "p2":0, 
      "p3":12, 
      "total":24, 
      "org":"EDF ENERGY" 
     }, 
     "TOWERS WATSON":{ 
      "p1":6, 
      "p2":0, 
      "p3":6, 
      "total":12, 
      "org":"TOWERS WATSON" 
     }, 
     "VODAFONE UK LTD":{ 
      "p1":0, 
      "p2":1, 
      "p3":0, 
      "total":1, 
      "org":"VODAFONE UK LTD" 
     }, 
     "DENPLAN LTD":{ 
      "p1":1, 
      "p2":0, 
      "p3":0, 
      "total":1, 
      "org":"DENPLAN LTD" 
     } 

    } 
+0

請發表評論,如果你要投票做 –

+0

,所以你需要用它應用數組排序? –

+0

是的,同樣的數組我要去迭代 –

回答

2

你可以讓一個數組,然後再排序它Array#sort()與想要的那種層次的回調。

var object = { "QVC": { "p1": 0, "p2": 12, "p3": 12, "total": 24, "org": "QVC" }, "TURNER & TOWNSEND": { "p1": 12, "p2": 12, "p3": 0, "total": 24, "org": "TURNER & TOWNSEND" }, "EDF ENERGY": { "p1": 12, "p2": 0, "p3": 12, "total": 24, "org": "EDF ENERGY" }, "TOWERS WATSON": { "p1": 6, "p2": 0, "p3": 6, "total": 12, "org": "TOWERS WATSON" }, "VODAFONE UK LTD": { "p1": 0, "p2": 1, "p3": 0, "total": 1, "org": "VODAFONE UK LTD" }, "DENPLAN LTD": { "p1": 1, "p2": 0, "p3": 0, "total": 1, "org": "DENPLAN LTD" } }, 
 
    array = Object.keys(object).map(function (k) { return object[k]; }); 
 

 
array.sort(function (a, b) { 
 
    return a.total - b.total || a.p1 - b.p1 || a.p2 - b.p2 || a.p3 - b.p3; 
 
}); 
 

 
console.log(array);

+1

這和我想要的完全一樣 –

1

無法排序對象,但你可以用Object.keys()創建對象鍵的排列和排序它

var obj = {"QVC":{"p1":0,"p2":12,"p3":12,"total":24,"org":"QVC"},"TURNER & TOWNSEND":{"p1":12,"p2":12,"p3":0,"total":24,"org":"TURNER & TOWNSEND"},"EDF ENERGY":{"p1":12,"p2":0,"p3":12,"total":24,"org":"EDF ENERGY"},"TOWERS WATSON":{"p1":6,"p2":0,"p3":6,"total":12,"org":"TOWERS WATSON"},"VODAFONE UK LTD":{"p1":0,"p2":1,"p3":0,"total":1,"org":"VODAFONE UK LTD"},"DENPLAN LTD":{"p1":1,"p2":0,"p3":0,"total":1,"org":"DENPLAN LTD"}} 
 

 
var sort = Object.keys(obj).sort(function(a, b) { 
 
    return obj[b].total - obj[a].total || obj[b].p1 - obj[a].p1 || obj[b].p2 - obj[a].p2 || obj[b].p3 - obj[a].p3; 
 
}) 
 

 
console.log(sort)

然後你就可以使用該鍵的排序數組的排序返回對象值訂購

var obj = {"QVC":{"p1":0,"p2":12,"p3":12,"total":24,"org":"QVC"},"TURNER & TOWNSEND":{"p1":12,"p2":12,"p3":0,"total":24,"org":"TURNER & TOWNSEND"},"EDF ENERGY":{"p1":12,"p2":0,"p3":12,"total":24,"org":"EDF ENERGY"},"TOWERS WATSON":{"p1":6,"p2":0,"p3":6,"total":12,"org":"TOWERS WATSON"},"VODAFONE UK LTD":{"p1":0,"p2":1,"p3":0,"total":1,"org":"VODAFONE UK LTD"},"DENPLAN LTD":{"p1":1,"p2":0,"p3":0,"total":1,"org":"DENPLAN LTD"}} 
 

 
var sort = Object.keys(obj).sort(function(a, b) { 
 
    return obj[b].total - obj[a].total || obj[b].p1 - obj[a].p1 || obj[b].p2 - obj[a].p2 || obj[b].p3 - obj[a].p3; 
 
}) 
 

 
sort.forEach(function(e) {console.log(obj[e]) });

+0

你可以嘗試http://eloquentjavascript.net/和https://developer.mozilla.org/en-US/docs/Web/JavaScript –