@animous

Как отфильтровать активные чекбоксы?

Есть группы чекбоксов разделенные name, хочу собрать массив отмеченных чекбоксов разделенный по группам(name)
Накидал код, но он записывает только последний выбранный чекбокс в каждой группе

Функция вызывается по клику на каждый чекбокс и в нее передается коллекция всех чекбоксов

function getFilterItemValue(filterList) {
  const filterListInputs = Array.from(filterList)
  const checkedGroup = []

  filterListInputs
    .filter((checkbox) => checkbox.checked)
    .map((checkbox) => {
      if (checkedGroup.indexOf(checkbox.name) === -1) {
        checkedGroup[checkbox.name] = []
      }
      return checkedGroup[checkbox.name].push(checkbox.value);
    })

  return checkedGroup
}
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const getCheckedValues = elements =>
  [...elements].reduce((acc, n) => (
    n.checked && (acc[n.name] = acc[n.name] || []).push(n.value),
    acc
  ), {});

Если пустые группы тоже должны присутствовать, то

const getCheckedValues = elements =>
  Array.prototype.reduce.call(
    elements,
    (acc, { name, value, checked }) => (
      acc[name] = acc[name] || [],
      checked && acc[name].push(value),
      acc
    ),
    {}
  );
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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