所以我知道这里有很多帖子描述了如何对多维对象进行排序,但我找不到符合我需求的帖子。
所有这些解决方案都基于这样的对象:
[{id: 1, value: 'aaa'},{id: 40, value: 'bbbb'}]
我的对象如下:
buttons: {
confirm: {
class: 'btn btn-primary',
value: 'Opslaan',
order: 1
},
cancel: {
class: 'btn btn-default',
value: 'Annuleer',
order: 10
}
delete: {
class: 'btn btn-danger',
value: 'Verwijder',
order: 2
}
},
当然,我想对此进行排序,以便结果是:确认,删除,取消。 我试过这个(我希望不会这样做):
this.options.buttons.sort ( function ( a, b ) {
return a.order - b.order;
});
但那给了我一个Uncaught TypeError: undefined is not a function
非常感谢任何帮助!
答案 0 :(得分:5)
正如@epascarello所提到的,JavaScript中的对象没有本机排序功能。
如果您有兴趣根据某个顺序对对象键的数组进行排序,可以使用Object.keys()!
var buttons = {
confirm: { value: 'foo', order: 0 },
cancel: { value: 'bar', order: 2},
delete: { value: 'baz', order: 1}
};
var sortedButtons = Object.keys(buttons).sort( function(keyA, keyB) {
return buttons[keyA].order - buttons[keyB].order;
}); // returns ['confirm', 'delete', 'cancel']
答案 1 :(得分:1)
我有一个非常相似的需求,我最终在这些方面做了一些事情 -
// Code typed on the fly -- untested.
buttons: {
list: [], // We'll store things here.
confirm: {
class: 'btn btn-primary',
value: 'Opslaan',
order: 1
},
cancel: {
class: 'btn btn-default',
value: 'Annuleer',
order: 10
}
delete: {
class: 'btn btn-danger',
value: 'Verwijder',
order: 2
}
}
// Now, fill the list from the properties
for (var key in buttons) {
// Don't actually use the 'list' property in the output
if (key !== "list") {
list.push(key);
}
}
// Now that we have our list, sort it
// Any specialized sorting can be done in the `sort` method here
buttons.list = buttons.list.sort();
// Now, deal with the sorted list
for (var i = 0; i < buttons.list.length; i++) {
var key = buttons.list[i];
var button = buttons[key];
console.log(button);
}