Я чертовски провожу время, выясняя это. У меня есть массив объектов в моем приложении vuejs, например:
var food= [{'name':'apples','price':'222.30'},{'name':'bananas','price':'99.30'},{'name':'oranges','price':'199.30'}];
Когда я пытаюсь сортировать по цене, я пробую и то, и другое.
return food.sort((a, b) => (a.price> b.price) ? 1 : -1);
AND
return _.orderBy(food, 'price')
Однако, похоже, это интерпретирует цену 99,30 доллара как выше, чем 222,30 доллара - я предполагаю, потому что 9 выше, чем 2?
Любая помощь будет оценена по достоинству! Мне также интересно, есть ли способ упорядочить от самого большого до самого маленького и наоборот.
Цены должны быть в одинарных кавычках. Может быть проблема?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Цены хранятся как strings; это усложняет задачу. Он будет сравнивать каждую цену в виде строк, по одному символу за раз, слева направо.
Рассмотрите возможность преобразования в float и упрощения кода:
return food.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));
Проблема с вашим кодом в том, что значения являются строками.
Простое исправление:
return food.sort((a, b) => (parseFloat(a.price) > parseFloat(b.price)) ? 1 : -1);
Цитата: «Это ... не то, как работает sort (), он ожидает 0, 1 или -1» А когда ровно?
Вы должны преобразовать цену в число и использовать в обратном вызове сортировки
return food.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));
Просто используйте номер
var food= [{'name':'apples','price':'222.30'},{'name':'bananas','price':'99.30'},{'name':'oranges','price':'199.30'}];
food.sort((a, b) => (Number(a.price) > Number(b.price)) ? 1 : -1);
console.info(food);Ваш вид не работает должным образом, потому что вы сравниваете цену как строку
var food= [{'name':'apples','price':'222.30'},{'name':'bananas','price':'99.30'},{'name':'oranges','price':'199.30'}];
function compare( a, b ) {
if ( parseFloat(a.price) < parseFloat(b.price) ){
return -1;
}
if ( parseFloat(a.price) > parseFloat(b.price) ){
return 1;
}
return 0;
}
food.sort( compare );
or
food.sort((a, b) => (parseFloat(a.price) > parseFloat(b.price)) ? 1 : -1);
ваши цены строковые. нужно сделать их числовыми значениями