简体   繁体   English

如何按对象值对对象数组进行排序

[英]How to Sort object arrays by its key value

I have Object with arrays like below , I am trying to sort it ascending and descending by its value (rank) 我有像下面的数组的对象,我试图按其值(排名)对其进行升序和降序排序

AXISBANK: [rank: 110, bnrank: 110, bs: 75, ss: 3]
BANKBARODA: [rank: 32, bnrank: 5, bs: 83, ss: 26]
HDFCBANK: [rank: 453, bnrank: 453, bs: 52, ss: 33]

So output array is like below if descending .. and reverse for ascending 因此,如果降序,则输出数组如下所示

HDFCBANK: [rank: 453, bnrank: 453, bs: 52, ss: 33]
AXISBANK: [rank: 110, bnrank: 110, bs: 75, ss: 3]
BANKBARODA: [rank: 32, bnrank: 5, bs: 83, ss: 26]

I tried following code 我试过以下代码

scorearr.sort((obj1, obj2) => obj1.bnrank - obj2.bnrank);

And also below code 还有下面的代码

function compares(a,b) {
console.log(a.bnrank);
  if (a.bnrank < b.bnrank)
    return -1;
  if (a.bnrank > b.bnrank)
    return 1;
  return 0;
}
scorearr.sort(compares);

Still scorearr is unchanged and its in old order only. 仍然没有得分,只有旧订单。

Edit : Below is sample data 编辑:下面是示例数据

{
  "HDFCBANK": {
    "rank": 453,
    "bnrank": 453,
    "bs": 52,
    "ss": 33
  },
  "ICICIBANK": {
    "rank": 228,
    "bnrank": 228,
    "bs": 88,
    "ss": 3
  },
  "KOTAKBANK": {
    "rank": 164,
    "bnrank": 164,
    "bs": 23,
    "ss": 82
  }
}

This is how I am creating this object ,please tell me if any alternative if this thing can be done easily. 这就是我创建这个对象的方法,请告诉我是否有任何替代方法可以轻松完成。

var scorearr = {};
//loop here
var id = $(this).attr('id');
scorearr[id] = {};
scorearr[id] = {rank:nfscore,bnrank:bnscore,bs:sellscore,ss:buyscore};
//end loop

If you have an object with nested objects, you could take the entries (key/value pairs), sort this array and rebuild a new object with the sorted order. 如果您有一个具有嵌套对象的对象,则可以获取条目(键/值对),对此数组进行排序并使用排序顺序重建新对象。

 var data = { AXISBANK: { rank: 110, bnrank: 110, bs: 75, ss: 3 }, BANKBARODA: { rank: 32, bnrank: 5, bs: 83, ss: 26 }, HDFCBANK: { rank: 453, bnrank: 453, bs: 52, ss: 33 } }, sorted = Object.assign(...Object .entries(data) .sort(({ 1: { bnrank: a } }, { 1: { bnrank: b } }) => b - a) .map(([k, v]) => ({ [k]: v })) ); console.log(sorted); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Another approach with an array. 另一种带阵列的方法。

 var data = [{ id: 'AXISBANK', rank: 110, bnrank: 110, bs: 75, ss: 3 }, { id: 'BANKBARODA', rank: 32, bnrank: 5, bs: 83, ss: 26 }, { id: 'HDFCBANK', rank: 453, bnrank: 453, bs: 52, ss: 33 }]; data.sort(({ bnrank: a }, { bnrank: b }) => b - a); console.log(data); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM