[英]How to Sort object arrays by its key value
我有像下面的數組的對象,我試圖按其值(排名)對其進行升序和降序排序
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]
因此,如果降序,則輸出數組如下所示
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]
我試過以下代碼
scorearr.sort((obj1, obj2) => obj1.bnrank - obj2.bnrank);
還有下面的代碼
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);
仍然沒有得分,只有舊訂單。
編輯:下面是示例數據
{
"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
}
}
這就是我創建這個對象的方法,請告訴我是否有任何替代方法可以輕松完成。
var scorearr = {};
//loop here
var id = $(this).attr('id');
scorearr[id] = {};
scorearr[id] = {rank:nfscore,bnrank:bnscore,bs:sellscore,ss:buyscore};
//end loop
如果您有一個具有嵌套對象的對象,則可以獲取條目(鍵/值對),對此數組進行排序並使用排序順序重建新對象。
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; }
另一種帶陣列的方法。
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.