Сортировка объекта JavaScript по имени свойства

Я искал какое-то время и хочу, чтобы сортировать объект Javascript следующим образом:

{
    method: 'artist.getInfo',
    artist: 'Green Day',
    format: 'json',
    api_key: 'fa3af76b9396d0091c9c41ebe3c63716'
}

и сортировка по алфавиту по имени:

{
    api_key: 'fa3af76b9396d0091c9c41ebe3c63716',
    artist: 'Green Day',
    format: 'json',
    method: 'artist.getInfo'
}

Я не могу найти код, который сделает это. Может ли кто-нибудь помочь мне?

Ответы

Ответ 1

По определению порядок ключей в объекте undefined, поэтому вы, вероятно, не сможете этого сделать таким образом, чтобы это было перспективным. Вместо этого вам следует подумать о сортировке этих ключей, когда объект фактически отображается пользователю. Какой бы порядок сортировки он не использовал внутри, на самом деле не имеет никакого значения.

По соглашению большинство браузеров сохраняют порядок ключей в объекте в том порядке, в котором они были добавлены. Таким образом, вы можете сделать это, но не ожидайте, что он всегда будет работать:

function sortObject(o) {
    var sorted = {},
    key, a = [];

    for (key in o) {
        if (o.hasOwnProperty(key)) {
            a.push(key);
        }
    }

    a.sort();

    for (key = 0; key < a.length; key++) {
        sorted[a[key]] = o[a[key]];
    }
    return sorted;
}

Ответ 2

эта функция принимает объект и возвращает отсортированный массив массивов формы [key, value]

function (o) {
   var a = [],i;
   for(i in o){ 
     if(o.hasOwnProperty(i)){
         a.push([i,o[i]]);
     }
   }
   a.sort(function(a,b){ return a[0]>b[0]?1:-1; })
   return a;
}

Структура данных объекта не имеет четко определенного порядка. В математических терминах набор ключей в объекте является неупорядоченным множеством и должен рассматриваться как таковой. Если вы хотите определить порядок, вам следует использовать массив, потому что массив, имеющий порядок, является предположением, на которое вы можете положиться. Объект, имеющий какой-то порядок, - это то, что осталось от капризов реализации.

Ответ 4

// if ya need old browser support
Object.keys = Object.keys || function(o) {  
var result = [];  
for(var name in o) {  
    if (o.hasOwnProperty(name))  
      result.push(name);  
}  
    return result;  
};

var o = {c: 3, a: 1, b: 2};
var n = sortem(o);

function sortem(old){
  var newo = {}; Object.keys(old).sort().forEach(function(k) {new[k]=old[k]});
  return newo;
}

// deep
function sortem(old){
  var newo = {}; Object.keys(old).sort().forEach(function(k){ newo[k]=sortem(old[k]) });
  return newo;
}
sortem({b:{b:1,a:2},a:{b:1,a:2}})