Я пытаюсь отсортировать свой массив одним из двух способов: сначала по накладным расходам по возрастанию, а затем по возрастанию суммы.
Следующий код отлично работает для накладных расходов, которые являются текстом, но замена a.overhead на a.amount работает неправильно. Он отображает 1,11,15,2,22,24,3,33,35 и т.д., где должно быть 1,2,3,11,15,22,24 и т.д.
sortedArray = [...amendedArray].sort((a,b)=>(a.Overhead.toLowerCase() > b.Overhead.toLowerCase()) ? 1 : ((b.Overhead.toLowerCase() > a.Overhead.toLowerCase()) ? -1 : 0));
Я считаю, что мне нужно использовать функцию для чисел, но мне помогли с приведенным выше кодом, и я не могу преобразовать его, чтобы он работал в моем сценарии.
sortedArray = [...amendedArray].sort(function(a, b){ return a.Amount - b.Amount });
Можете ли вы включить исполняемый фрагмент (используйте панель инструментов), который воспроизводит проблему?
также возможно Как отсортировать массив объектов по нескольким полям?



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


Вы можете использовать подборщик, который может обрабатывать сравнение как строк, так и чисел.
const collator = new Intl.Collator("en", {
sensitivity: 'base', // ignore case and accents
numeric: true // treat numeric strings as numbers, "1" < "2" < "10"
});
sortedArray = [...amendedArray].sort((a, b) => {
return collator.compare(a.Overhead, b.Overhead) || collator.compare(a.Amount, b.Amount)
})
Вы можете узнать больше о Intl.Collator и опциях
Это дубликат несколько раз.