在javascript中对对象的关联数组进行排序 [英] Sorting associative array of objects in javascript
问题描述
我在js中有一个特定的对象数组,它们代表一个表的列. 我的对象是:
I have a particular array of objects in js that represent columns of a table. My object is:
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"对对象进行排序,但是要使用
I have to order the object by "displayOrder", but using a function like
columns.sort(function(a, b) {
return parseFloat(a.displayOrder) - parseFloat(b.displayOrder);
});
很明显,它返回一个错误. 我该怎么做?
obviously it return an error. How i can do this?
推荐答案
You may use .sort
only on arrays due to it is Array.prototype
method (MDN). So as an easiest solution I would preffer to reform your columns
data from object to array:
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
以编程方式完成:
This transformation (from object
to array
) could be done programmatically via 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()
方法.
Here the columns
is your initial object. With the help of Object.keys()
and .map()
I turn it into the array I described before, so the .sort()
method could be called in a chain.
这篇关于在javascript中对对象的关联数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!