Единственная действительно сложная часть здесь - запятые в 1,000,000
. Вам нужно будет удалить их, прежде чем пытаться сравнить числа.
price.sort(function(x, y) {
return y.replace(/,/g,'') - x.replace(/,/g,'');
});
Это произведет
["1,000,000", "800", "800", "800", "750",
"700", "700", "600", "500", "500", "400",
"350", "250", "200", "200", "25", "1", "0"]
Или, возможно, преобразовать элементы чисел, а затем отсортировать результаты:
price = price.map(function(x) { return parseInt(x.replace(/,/g,''),10) })
.sort(function(x, y) { return y - x; });
Это произведет
[1000000, 800, 800, 800, 750, 700, 700, 600,
500, 500, 400, 350, 250, 200, 200, 25, 1, 0]
Примечание: Array.prototype.map
был представлен в ECMAScript 5, поэтому он недоступен в некоторых старых браузерах. Если это вызывает беспокойство, альтернативой является использование обычного цикла for для преобразования массива.
сортировать как цифры или сортировать как строки? –
Ответил красиво здесь - http://stackoverflow.com/a/1063027/448865 – cpreid
Этот вопрос не заслуживает всех этих downvotes.Собственная функция сортировки JavaScript не сортирует массивы «целых чисел», как можно было бы ожидать. Это не тривиальный вопрос. – cpreid