2012-08-03 5 views
1

Можно создать дубликат:
Sorting a JavaScript object
Sort JavaScript object by keyКак отсортировать элементы объекта в javascript?

У меня есть массив: (? Номер заказа)

var arr = {} 
arr[2323] = 1 
arr[123] = 1 
... 
arr[n+232323] = 1 

Как получить все элементы из aobject отсортирован по ключу

for (key in arr) { 
    alert(typeof(key)) 
} 

возвращение строка type.

+2

вы имеете в виду объект, потому что нет ничего называют ассоциативным массивом в JavaScript – bugwheels94

+0

I меня немного беспокоит тот факт, что люди отвечают, что не могут сортировать их, ясно, что если все ключи являются числовыми, их можно отсортировать. Возможно, он хочет перебирать ключи (в числовом порядке), чтобы он мог загрузить их в новый объект, где ключи не так далеко друг от друга. – VoronoiPotato

+0

Объекты не могут быть отсортированы напрямую, однако ответ «я не являюсь» предоставит упорядоченный список «keynames» внутри объекта, поэтому их можно вызвать в разделе. – Austin

ответ

1

Это не ассоциативный массив, это объект. В javascript нет ассоциативных массивов.

Кроме того, объекты не упорядочены. Порядок ключей в объекте не имеет смысла.

1

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

var sorted = Object.keys(my_obj) 
        .sort(function(a,b) { 
          return a - b; 
         }); 

Это предполагает, что ключи числовой.

Затем вы можете перебирать массив и использовать каждую клавишу, чтобы получить значение из my_obj ...

sorted.forEach(function(key) { 
        console.log(my_obj[key]); 
       }); 
+0

'keys' по определению' strings' на этом языке. Таким образом, вы либо должны 'parseInt', либо использовать' + keyname' или вызывать '.localeCompare' в строке' a' или 'b'. – jAndy

+1

@jAndy: "numeric" отличается от "number". Вы можете иметь * числовые строки *. Я просто говорю, что моя сортировка предполагает, что требуется числовая сортировка. –

+0

Обратите внимание, что это вернет упорядоченный массив, содержащий список ключевых слов объекта, к которому вы хотите получить доступ. – Austin

1

Короткий ответ: Вы не можете.

Длинный ответ: Ассоциативные массивы в JavaScript - это действительно объекты JavaScript. Когда вы добавляете новый элемент, вы действительно добавляете новый элемент к объекту. Хотя большинство браузеров будут перечислять эти члены в том порядке, в котором они были добавлены, стандарт утверждает, что порядок не определен. Вы не можете сортировать то, что не определено.

1

Объекты JavaScript (карты/словари/ассоциативные массивы) не имеют порядка, вы не можете отсортировать их. Сначала вам нужно будет преобразовать его в массив. Как вам нужны только ключи от вашего объекта в цикле, то Object.keys() function (potentionally нуждается в подкладку для старых браузеров) предназначен для выполнения этой задачи:

var obj = {...}; 
var keys = Object.keys(obj).sort(function(a,b){return a-b;}); // numerically sorted 
for (var i=0; i<keys.length; i++) { 
    alert(keys[i]); 
    // access the values by obj[keys[i]] 
} 
Смежные вопросы