Аналогично zerkms:
objectz.sort(function(a,b) {
var x = b.metric - a.metric;
return x || b.name - a.name;
});
Кажется, что это обратная сортировка (сначала появляются более высокие значения), это то, что вы хотите?
Редактировать
Обратите внимание, что оператор -
подходит только в том случае, если значение name можно преобразовать в число. В противном случае используйте <
или >
. Функция сортировки должна иметь дело с a.name == b.name, чего сам по себе оператор >
не будет делать, поэтому вам нужно что-то вроде:
objectz.sort(function(a,b) {
var x = b.metric - a.metric;
// If b.metric == a.metric
if (!x) {
if (b.name == a.name) {
x = 0;
else if (b.name < a.name) {
x = 1;
else {
x = -1;
}
}
return x;
});
, который можно сделать более кратким:
objectz.sort(function(a,b) {
var x = b.metric - a.metric;
if (!x) {
x = (b.name == a.name)? 0 : (b.name < a.name)? 1 : -1;
}
return x;
});
Учитывая, что сравнение metric
представляется наибольшим по наименьшему порядку, тогда троичное выражение должно быть:
x = (b.name == a.name)? 0 : (b.name < a.name)? -1 : 1;
если требуется, скажем, Зельда приходит раньше Энн. Кроме того, значение name
должно быть уменьшено до всего нижнего регистра (или всего верхнего регистра), в противном случае 'zelda' и 'Ann' будут отсортированы в обратном порядке к 'Zelda' и 'ann'