[英]Sorting associative array of objects in javascript
我在js中有代表表列的特定對象數組。 我的對象是:
var columns = {
"image": {
"show": false,
"orderable": true,
"value": 0,
"displayOrder":2
},
"name": {
"show": true,
"orderable": true,
"value": 1,
"displayOrder":0
},
"company": {
"show": false,
"orderable": false,
"value": 2,
"displayOrder":1
}
}
我必須通過“ displayOrder”對對象進行排序,但是要使用類似
columns.sort(function(a, b) {
return parseFloat(a.displayOrder) - parseFloat(b.displayOrder);
});
顯然,它返回一個錯誤。 我該怎么做?
您只能在數組上使用.sort
,因為它是Array.prototype
方法( MDN )。 因此,作為最簡單的解決方案,我希望將columns
數據從對象轉換為數組:
var columnList = [
{
"key": "image",
"value": {
"show": false,
"orderable": true,
"value": 0,
"displayOrder":2
}
},
{
"key": "name",
"value": {
"show": true,
"orderable": true,
"value": 1,
"displayOrder":0
}
},
{
"key": "company",
"value": {
"show": false,
"orderable": false,
"value": 2,
"displayOrder":1
}
}
];
var result = columnList.sort(function(a, b) {
return parseFloat(a.value.displayOrder) - parseFloat(b.value.displayOrder);
});
console.log(result);
console.log
的結果將完全相同
0:{key: "name", value: {…}}
1:{key: "company", value: {…}}
2:{key: "image", value: {…}}
這種轉換(從object
到array
)可以通過Object.keys
以編程方式完成:
result = Object.keys(columns)
.map(c => ({ key: c, value: columns[c]}))
.sort((a, b) => a.value.displayOrder - b.value.displayOrder)
在這里, columns
是您的初始對象。 在Object.keys()
和.map()
的幫助下,我將其轉換為前面描述的數組,因此可以在鏈中調用.sort()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.