Функция сортировки по умолчанию сравнивает значения в виде строк. Чтобы правильно отсортировать [цена: продажа], вам нужно привести цену к числу, прежде чем делать сравнение. Тогда функция сортировки для вашей задачи выглядит следующим образом:
yourResult.sort((tupleA, tupleB) => Number(tupleA[0]) - Number(tupleB[0]))
Проблема с вашим кодом состоит в том, что структура данных, с которой вы работаете, представляет собой массив из двух элементов. Эти элементы могут быть доступны только по индексу. arr[0]
или arr[1]
.
Ответьте на свой вопрос ниже:
Я думаю, что вы немного изменили структуру данных со времени первоначальной публикации. Да, при использовании concat значения помещаются в один массив.
Текущее решение, которое у вас есть сейчас, похоже на смесь копировальных паст. Позвольте мне объяснить вам, как бы я решил эту проблему:
- Ваши данные:
const json = JSON.parse(data);
Поскольку в lastSale есть пустые значения, давайте избавимся от этих продуктов с помощью фильтра:
const filteredProducts = json.Products.filter(function(product) {
return product.market.lastSaleSize !== null &&
product.market.lastSale !== null
})
Подробнее о фильтре: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Для всех продуктов вам нужны lastSaleSize и lastSale. Хорошей структурой данных для этого будет массив с объектами этого формата:
{ lastSaleSize: X, lastSale: Y }
Это может быть достигнуто с помощью функции map
. Для каждого полученного продукта возвращается новый объект:
const sales = filteredProducts.map(function(product) {
return {
lastSaleSize: product.market.lastSaleSize,
lastSale: product.market.lastSale,
}
})
Подробнее о функции карты: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/map
Последний шаг - сортировка. Каждый предмет продажи теперь является объектом с ключами
lastSaleSize
и
lastSale
. Следовательно, можно получить доступ к lastSaleSize с помощью оператора точки (
.lastSaleSize
). Поскольку lastSaleSize по-прежнему является строкой, требуется приведение к числу.
const result = sales.sort(function(saleA, saleB) {
return Number(saleA.lastSaleSize) - Number(saleB.lastSaleSize)
})