Задать вопрос
Профиль пользователя заблокирован сроком с 21 июля 2020 г. и навсегда по причине: нарушение п. 6.6 правил сайта
  • Как распределить li по разным ul в зависимости от их первой буквы?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const ul = document.querySelector('.ul-parent');
    
    const groupedNodes = Array.prototype.reduce.call(
      ul.children,
      (acc, n) => {
        const k = n.textContent[0].toLowerCase();
        (acc[k] = acc[k] ?? []).push(n);
        return acc;
      },
      {}
    );
    
    ul.replaceWith(...Object.entries(groupedNodes).map(n => {
      const ul = document.createElement('ul');
      ul.classList.add('ul-parent', n[0] + '-litter');
      ul.append(...n[1]);
      return ul;
    }));

    или

    const ul = document.querySelector('.ul-parent');
    
    const groupedHTML = Array
      .from(ul.querySelectorAll(':scope > li'))
      .reduce((acc, { innerText: [ c ], outerHTML }) => {
        const k = c.toLowerCase();
        (acc[k] = acc[k] ?? []).push(outerHTML);
        return acc;
      }, {});
    
    ul.outerHTML = Object
      .entries(groupedHTML)
      .map(([ k, v ]) => `<ul class="ul-parent ${k}-litter">${v.join('')}</ul>`)
      .join('');
    Ответ написан
    2 комментария