@timofeus91
Junior Frontend Developer

Как отсортировать по цене через Javascript?

Всем доброго дня! Мой первый вопрос на платформе, так что заранее извиняюсь если оформил его не очень корректно.

Есть задача отсортировать элементы списка в html через javascript. Дана строка с ценой и обозначением валюты. Пытался найти туториалы в сети по данному вопросу, но код не работает. Не могу , к сожалению, понять в чем ошибка. Заранее спасибо за ответ!

Ниже пример кода. Всего элементов списка 6.

  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@MikUrrey
Не представляю, где вы этот код взяли, но часть элементов там вообще от балды.

Во-первых, costButton, на который вяжется обработчик клика в конце, никак не определен.
Очевидно, это кнопка сортировки, поэтому заменяем на document.querySelector('#cost-button')

Во-вторых, const elementsContainer = document.querySelector('.elements__lis');.
Похоже, list, а не lis - опечатка :)

В-третьих, costArrow - это, похоже, должна быть картинка, показывающая направление сортировки.
Её нет, значит, убираем costArrow, убираем аргумент arrow у sortCard и у нее же убираем строку toggleArrow(arrow); (можно так же и саму function toggleArrow выкинуть).

Вуаля, все работает.

const allElements = document.querySelectorAll('.elements__item');
const allPrice = '.elements__item-title_cost';

const elementsContainer = document.querySelector('.elements__list');

//функция по сортировке
function sortCard(elements, type) {
    let sortingObj = {};
    elements.forEach((element, index) => {
        const elementValue = parseInt(element.querySelector(type).textContent.replace('руб.', '').replace(/\s+/g, ''));
        sortingObj[elementValue] = {'element': element, 'index': index};
    });
        
        const keys = Object.keys(sortingObj);
    
        function numberSort(a, b) {
            a = parseInt(a);
            b = parseInt(b);
            if (a < b) return -1;
            if (a > b) return 1;
          }
        keys.sort(numberSort);

        keys.map(function(key, index){
            elementsContainer.insertAdjacentElement('beforeend', sortingObj[key]['element']);
          });
        
}



document.querySelector('#cost-button').addEventListener("click", function() {
    sortCard(allElements, allPrice);

})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы