JS упорядочивает массив объектов по свойству объекта (в долларах)

Я чертовски провожу время, выясняя это. У меня есть массив объектов в моем приложении 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?

Любая помощь будет оценена по достоинству! Мне также интересно, есть ли способ упорядочить от самого большого до самого маленького и наоборот.

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

kaladin_storm 05.04.2021 22:49

Цены должны быть в одинарных кавычках. Может быть проблема?

Siemens 05.04.2021 22:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
54
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Цены хранятся как 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» А когда ровно?

epascarello 05.04.2021 22:51
Ответ принят как подходящий

Вы должны преобразовать цену в число и использовать в обратном вызове сортировки

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);

Другие вопросы по теме