Advertisement
vit134

Преобразовать дерево в меню (Яндекс)

Nov 9th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Преобразование дерева в пункты меню по уровням вложенности
  3.     пример дерева:
  4.     [
  5.         {
  6.             name: '1',
  7.             items: [
  8.                 {name: '1-1'},
  9.                 {
  10.                     name: '1-2',
  11.                     items: [
  12.                         {name: '1-2-1'}
  13.                     ]
  14.                 }
  15.             ]
  16.         },
  17.         {
  18.             name: '2'
  19.         },
  20.         {
  21.             name: '3',
  22.             items: [
  23.                 {name: '3-1'},
  24.                 {
  25.                     name: '3-2',
  26.                     items: [
  27.                         {name: '3-2-1'},
  28.                         {name: '3-2-2'}
  29.                     ]
  30.                 },
  31.                 {name: '3-3'}
  32.             ]
  33.         }
  34.     ]
  35. */
  36.  
  37. function menu(tree) {
  38.     let count = tree.length;
  39.     let result = {};
  40.     let level = 0;
  41.  
  42.     while ( tree.length > 0 ) {
  43.        let cur = tree.shift();
  44.        if (cur.items && cur.items.length > 0) {
  45.             cur.items.forEach(el => {
  46.                 tree.push(el);
  47.             })
  48.        }
  49.        
  50.        if (level in result) {
  51.             result[level].push(cur.name)
  52.        } else {
  53.             result[level] = [cur.name]
  54.        }
  55.        
  56.        if (--count === 0) {
  57.             count = tree.length;
  58.             level++;
  59.        }
  60.     }
  61.    
  62.     return Object.values(result);
  63. }
  64.  
  65.  
  66. console.log(menu(menuTree))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement