• Что я пропустил, при работе с рекурсией?

    SimBioT19
    @SimBioT19
    {{ user.about }}
    Заменить
    funtion test1(arr)
    на
    funtion test1(arr) {
           return arr.reduce((res, item) => {
              if (item.id === objID) {
                res.push(item);
              } else {
              res.push(...test1(item.children));
              }
               return res;
            }, []);       
    }
    Ответ написан
    1 комментарий
  • Как упростить этот javascript код?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    const content = document.body.querySelector('.editer');
    const htmlTags = content.getElementsByTagName("*");
    const navs = []; // здесь let не нужен
    
    for(let i = 0; i < htmlTags.length; i++) {
      const htmlTag = htmlTags[i];
      const lastNav = navs[navs.length - 1]; // resH2 всегда будет таким (см. комменты ниже)
      const lastChildOfLastNav = lastNav && lastNav.children[lastNav.children.length - 1]; // resH3 всегда будет таким
      switch(htmlTag.localName) {
      case 'h2':
        setID(htmlTag, i);
        addItem(navs, htmlTag);
        break;
      case 'h3':
        setID(htmlTag, i);
        // тот find что у Вас всегда найдет последний элемент если он есть, не зачем гонять лишний цикл
        if(lastNav) {
          addItem(lastNav.children, htmlTag);
        }
        break;
      case 'h4':
        setID(htmlTag, i);
        // опять же был лишний цикл ради последнего элемента, да еще и в него вложен такой же
        if(lastChildOfLastNav) {
          addItem(lastChildOfLastNav.children, htmlTag);
        } else if(lastNav) {
          addItem(lastNav.children, htmlTag);
        }
        break;
      }
    }
    
    function addItem(obj, {innerText: name, id}) {
      obj.push({
        name,
        id,
        children: []
      });
    }
    
    function setID(htmlTag, i) {
       htmlTag.setAttribute('id', `nav-${i}`);
    }
    Ответ написан
    Комментировать
  • Как правильно обойти объект JS для построения дерева?

    0xD34F
    @0xD34F Куратор тега JavaScript
    function createTree(data) {
      const obl = {};
      const org = {};
      const podr = {};
    
      data.forEach(n => {
        obl[n.obl.id] = { ...n.obl, children: [] };
        org[n.org.id] = { ...n.org, children: [] };
        podr[n.podr.id] = { ...n.podr, children: [] };
      });
    
      data.forEach(n => podr[n.podr.id].children.push({ ...n.dolzh }));
      Object.values(org).forEach(n => obl[n.parent_obl].children.push(n));
      Object.values(podr).forEach(n => org[n.parent_org].children.push(n));
    
      return Object.values(obl);
    }
    
    
    const tree = createTree(arr);
    Ответ написан
    1 комментарий