2013-12-18 4 views
-1

Я знаю, сортировать:Сортировка значений в JavaScript,

var num = [1, 10, 6] 

является

num.sort(function(a,b){ 
    return a - b; 
} 

То, что я не знаю, как сортировать:

var num = [ 

     {"Bob": 1}, 

     {"Tim": 10}, 

     {"Tom": 6}, 
     ]; 

Любые идеи ??? Спасибо!

+0

Объекты имеют разные свойства, поэтому они должны означать разные вещи. Как вы хотите сравнить их, поскольку у них нет ничего общего? Должен ли Боб прибыть до или после десяти Тимов? – Guffa

+0

Этот массив представляет собой массив различных объектов. – AbhinavRanjan

ответ

2

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

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

var num = [ 
    {"Bob": 1}, 
    {"Tim": 10}, 
    {"Tom": 6}, 
    ]; 

num.sort(function(a, b) { 
    var aVal, bVal, k; 
    for (k in a) 
     aVal = a[k]; 
    for (k in b) 
     bVal = b[k]; 
    return aVal - bVal; 
}); 

// num is now [{"Bob":1},{"Tom":6},{"Tim":10}] 
+0

Спасибо! Я просто попробовал это и отлично работал. Еще раз спасибо. – user3007294

+0

Добро пожаловать. Помните, что функция, которую я показал, будет работать, только если у вас есть объекты с одним свойством. (Поскольку, как только у вас есть несколько свойств с неизвестными именами, нет способа определить, какой из них нужно сортировать, если вы не начнете делать это _really_ сложным, если предположить, что только одно свойство имеет числовое значение и ищет это свойство или что-то в этом роде.) – nnnnnn

1

Вы можете использовать метод сортировки массива вы упомянули выше.

Переместить объект в массив, а затем отсортировать этот массив.

var sorted = []; 
for (var person in num) { 
    sorted.push([person, num[person]]); 
} 

sorted.sort(function(a,b) { 
    return a[1] - b[1]; 
}); 
+0

Это не работает. Когда вы используете 'a [1] - b [1]', вы пытаетесь вычесть два объекта, таких как '{" Bob ": 1} - {" Tom ": 6}', который дает 'NaN'. – nnnnnn

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