Задать вопрос
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"

Как сделать из этого кода цикл?

function UpdateQuantity() {
rentRequest({
      action: 'getservice'
    }, function(res) {
    

    try { res = JSON.parse(res) } catch(ex) {  }
    const count3 = res.data.filter(n => n.categoryid === '3').length;
    const count1 = res.data.filter(n => n.categoryid === '1').length;
    const count2 = res.data.filter(n => n.categoryid === '2').length;
    const count4 = res.data.filter(n => n.categoryid === '4').length;
    const count5 = res.data.filter(n => n.categoryid === '5').length;
    const count0 = res.data.filter(n => n.categoryid === '0').length;
    $('#category_count_3').html('( '+count3+' )');
    $('#category_count_1').html('( '+count1+' )');
    $('#category_count_2').html('( '+count2+' )');
    $('#category_count_4').html('( '+count4+' )');
    $('#category_count_5').html('( '+count5+' )');
    $('#category_count_0').html('( '+count0+' )');
});
}

Хотелось бы из этого создать цикл
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Если делать ровно то, что спрошено:

for (let i = 0; i < 6; i++) {
  const count = res.data.filter(n => +n.categoryid === i).length;
  $(`#category_count_${i}`).html(`(${count})`);
}

Или, вместо многократной фильтрации можно обойтись одним проходом по данным.

Вариант раз - выполняем группировку:

const grouped = res.data.reduce((acc, n) => {
  (acc[n.categoryid] = acc[n.categoryid] || []).push(n);
  return acc;
}, {});

$('[id^="category_count_"]').text(function() {
  return `(${(grouped[/\d*$/.exec(this.id)[0]] || []).length})`;
});

Вариант два - считаем кого сколько:

const counted = res.data.reduce((acc, n) => (
  acc[n.categoryid] = -~acc[n.categoryid],
  acc
), {});

document.querySelectorAll('[id^="category_count_"]').forEach(n => {
  n.textContent = `(${counted[n.id.split('_').pop()] || 0})`;
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы