2016-01-21 3 views
-1

У меня есть объект, как этот { Алексы: 1, Джон: 5, Билл: 2 }Сортировка объекта с JS

Мне нужно сортировать по значению, от большого к малому, но Я не понимаю, как это сделать. Есть идеи?

+0

Вы не хотите. –

+4

Нет объектов в объектах, их нельзя сортировать – adeneo

+1

Если вы имели в виду «распечатать объект с отсортированными элементами», то вы можете (и должны) отредактировать вопрос :) – wil93

ответ

0

var objUnordered = { alexa: 1, John: 5, Bill: 2 }; 
 
var objOrdered = {}; 
 
var sortable = []; 
 

 
for (var element in objUnordered){ 
 
    sortable.push([element, objUnordered[element]]); 
 
} 
 
sortable.sort(function(a, b) {return a[1] - b[1]}) 
 
for(var key in sortable){ 
 
    objOrdered[sortable[key][0]] = sortable[key][1]; 
 
} 
 

 
console.log(objOrdered); //print this -> Object { alexa=1, Bill=2, John=5}

+0

Это сработало, спасибо soooo много !!! – user3474502

1

Вы все еще можете получить массив ключей сортируется - то просто цикл массив ключей для доступа к вашему объекту в правильном порядке:

var obj = { alexa: 1, John: 5, Bill: 2 }; 
var sortedKeys = Object.keys(obj).sort(function(a, b) { 
    return obj[a] - obj[b] 
}); 

sortedKeys.forEach(function(k) { 
    console.log(obj[k]); 
}); 

Создание массива из объекта:

var sortedArray = Object.keys(obj).sort(function(a, b) { 
    return obj[a] - obj[b] 
}).map(function(k) { 
    var o = {}; 
    o[k] = obj[k]; 

    return o; 
}); 
+0

Это работает, но результат, который мне нужен, - {Alexa : 1, Bill: 2, John: 5}, и когда он отсортирован, мне нужно знать ключ, который принадлежит каждому числу, потому что значения могут повторяться ... – user3474502

+0

Измените формат на массив, например '[{ имя: 'Alexa', numb: 1}, {name: 'Bill', numb: 2}] ', тогда вы можете отсортировать его и сохранить дорожку – adeneo

+0

@ user3474502 Объекты * не * упорядочены. '{Alexa: 1, Bill: 2, John: 5}' точно так же, как '{Alexa: 1, John: 5, Bill: 2}' и сортировка - это бессмысленный вопрос. –

Смежные вопросы