2013-11-14 5 views
0

Как заказать этот объект по ключам, по алфавиту?Сортировка ассоциативного массива/объекта JavaScript по ключам по алфавиту

Я пробовал:

racks.sort(); 

Объект стойки заполняется следующим образом:

(Statdev является строкой, и kartnr и bitnrk целые числа)

racks[jPunten[i].STATDEV] = { 
          label: '', 
          punkt: [{ 
          x: jPunten[i].KARTNR, 
          y: jPunten[i].BITNRK}] 

Некоторые выход Firebug (я также заметил, что в firebug объект IS упорядочен по алфавиту):

racks 
    [] 

DAY 
    Object { punkt=[8], label=""} 

label 
    "" 

punkt 
    [Object { x="12", y="1"}, Object { x="12", y="2"}, Object { x="12", y="3"}, 5 meer...] 

0 
    Object { x="12", y="1"} 

1 
    Object { x="12", y="2"} 

2 
    Object { x="12", y="3"} 

3 
    Object { x="12", y="4"} 

4 
    Object { x="12", y="5"} 

5 
    Object { x="12", y="6"} 

6 
    Object { x="12", y="7"} 

7 
    Object { x="12", y="8"} 

LSF01 
    Object { punkt=[1], label=""} 

label 
    "" 

punkt 
    [Object { x="1", y="10"}] 

0 
    Object { x="1", y="10"} 

x 
    "1" 

y 
    "10" 
+0

В объектах JavaScript нет неотъемлемого порядка. Если вам нужна надежная сортировка, создайте массив ключей и отсортируйте их. – Sirko

+0

Вы не можете сортировать объекты. Они автоматически сортируются по ключевым словам (в большинстве случаев). –

ответ

1

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

1

Попробуйте это:

sort = function(obj, comparator) { 
    var array = []; 
    for (var i in obj) { 
     array.push([obj[i], i]); 
    } 
    array.sort(function(o1, o2) { 
     return comparator(o1[0], o2[0]); 
    }); 
    var newObj = {}; 
    for (var i = 0; i < array.length; i++) { 
     newObj[array[i][1]] = array[i][0]; 
    } 
    return newObj; 
} 
+0

Что такое компаратор? Можете ли вы привести пример? – Rubicksman

0

Есть два массива:

  • один массив для ключей
  • второго ассоциативного массива, используя пару ключей значение, на самом деле является объект.

// нормальный объект нотации

var personObject = {firstName:"John", lastName:"Doe"}; 
alert('personObject.firstName - ' + personObject.firstName); 

// добавить объект с использованием обозначения объекта-массива, примечание: делать это будет преобразовать массив в объект

personObject["age"] = 46; 

// массив от ключей, отсортировано

var keysArray = ["firstName", "lastName"]; 
keysArray[keysArray.length] = "age"; 
keysArray.sort(); 

// получить значение объекта, используя нотация массива-объекта с массивом как ключ

alert('personObject[keysArray[0]] - ' + personObject[keysArray[0]]); 
Смежные вопросы