Сортировка объекта 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;
}
Структура данных объекта не имеет четко определенного порядка. В математических терминах набор ключей в объекте является неупорядоченным множеством и должен рассматриваться как таковой.
Если вы хотите определить порядок, вам следует использовать массив, потому что массив, имеющий порядок, является предположением, на которое вы можете положиться. Объект, имеющий какой-то порядок, - это то, что осталось от капризов реализации.
Ответ 3
Просто используйте отсортированный stringify(), когда вам нужно сравнить или хешать результаты.
Ответ 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}})