Advertisement
vit134

Flatten развернуть массив в плоский (Яндекс)

Nov 4th, 2018
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Написать функцию flat которая развернет массив вида [1, [2], [3, [[[4]]]]] в плоский
  3. */
  4.  
  5. // Рекурсия
  6. const arr =  [1, [2], [3, [[[4]]]]];
  7. const flat = arr => {
  8.     let result = [];
  9.    
  10.     const walk = el => {
  11.         el.forEach(item => {
  12.             if (Array.isArray(item)) {
  13.                 result.push(item)
  14.             } else {
  15.                 walk(item);
  16.             }
  17.         })
  18.        
  19.         return result;
  20.     }
  21.    
  22.     return walk(arr);
  23. }
  24.  
  25. //Рекурсия reduce + concat
  26. function flat(arr1) {
  27.    return arr1.reduce((acc, val) => {
  28.         return Array.isArray(val) ?
  29.             acc.concat(flat(val)) :
  30.             acc.concat(val)
  31.    }, []);
  32. }
  33.  
  34. // Очередь
  35. function flatten(array) {
  36.   var stack = [...array];
  37.   var result = [];
  38.  
  39.   while (stack.length > 0) {
  40.     var element = stack.pop();
  41.     if (Array.isArray(element)) {
  42.       for (var i = element.length - 1; i >= 0; i--) {
  43.         stack.push(element[i]);
  44.       }
  45.     } else {
  46.         console.log(element)
  47.       result.push(element);
  48.     }
  49.   }
  50.   return result;
  51. }
  52.  
  53. console.log(flat([1, 'any [complex] string', null, function() {}, [1, 2, [3, '4'], 0], [], { a: 1 }]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement