Javascript сортировка, возможно, не так проста, как кажется. Я пытаюсь объяснить это вам, чтобы вы могли исправить свою функцию.
Предположим, у нас есть следующие значения:
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic', value: 13 },
{ name: 'Zeros', value: 37 }
];
И мы напишем эту функцию:
items.sort()
мало что происходит. Это потому, что мы имеем дело со списком объектов и поэтому хотим добавить compareFunction
. Вы сделали это довольно хорошо, но я полагаю, вы не совсем понимаете, что он делает. Если мы используем, например, compareFunction
:
items.sort(function (a, b) {
var nameA = a.name.toUpperCase(); // ignore upper/lower case!
var nameB = b.name.toUpperCase(); // ignore upper/lower case!
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// Namen müssen gleich sein
return 0;
});
Наш список будет отсортирован по алфавиту. Зачем? Потому что мы говорим функции прямо здесь:
var nameA = a.name.toUpperCase(); // ignore upper/lower case!
var nameB = b.name.toUpperCase(); // ignore upper/lower case!
, что мы ищем свойства «name» нашего объекта. Мы могли бы легко заменить a.name.toUpperCase()
на a.value
, и теперь мы будем сортировать наш массив по значению внутри свойства value
нашего объекта.
При этом ваша функция сортировки в настоящее время запрограммирована на всегда сортировать по алфавиту (от a до z). Вы никогда не реализовывали logi c, чтобы сделать обратное или остановить сортировку. Я думаю, вы, вероятно, предположили, что compareFunction
уже выполняет функцию переключения сортировки, но это не так.
Чтобы выполнить сортировку по убыванию (z - a), вы можете использовать функцию .reverse (). Это будет выглядеть примерно так:
items.sort(function (a, b) {
var nameA = a.name.toUpperCase(); // ignore upper/lower case!
var nameB = b.name.toUpperCase(); // ignore upper/lower case!
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// Namen müssen gleich sein
return 0;
}).reverse();
et voilà - теперь ваш список отсортирован в порядке убывания (z - a). (подробнее читайте здесь: Сортировка строк в порядке убывания в Javascript (наиболее эффективно)? ).
Все, что вам нужно сейчас сделать, это реализовать правильную функцию сортировки в правильное время - я думаю, это должно быть то, чем вы можете управлять сами. В остальном я рад помочь :)
подробнее о сортировке массивов (javascript документы: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)