Javascript排序多维对象

时间:2014-05-06 16:04:56

标签: javascript sorting javascript-objects

所以我知道这里有很多帖子描述了如何对多维对象进行排序,但我找不到符合我需求的帖子。

所有这些解决方案都基于这样的对象:

[{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

非常感谢任何帮助!

2 个答案:

答案 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);
}