Разложить массив до первого уровня

369
08 июля 2017, 11:44

Есть массив: [['a', 'b', 'c'], 'r', 't', ['g', ['j', 'u', 'i'], 'y'], 'i'].

Как мне его разложить до первого уровня, чтобы вышел такой массив: ['a', 'b', 'c', 'r', 't', 'g', 'j', 'u', 'i', 'y', 'i'].

В голову приходит только циклами и проверками.

Answer 1

Решение для общего случая, использующее функции isArray, map и concat.

function decompose(array) { 
    return Array.isArray(array) ? 
        [].concat(...array.map(decompose)) : 
        [array]; 
} 
 
let array = [['a', 'b', 'c'], 'r', 't', ['g', ['j', 'u', 'i'], 'y'], 'i']; 
let arrayDecomposed = decompose(array); 
console.log(arrayDecomposed);

Answer 2

При отсутствии квадратных скобок в элементах массива можно сделать так:

var arr = [['a', 'b', 'c'], 'r', 't', ['g', ['j', 'u', 'i'], 'y'], 'i']; 
var str = JSON.stringify(arr); 
str = str.replace(/\[|\]/g, ''); 
arr = JSON.parse('[' + str + ']'); 
console.log(arr);

Answer 3

лютое рекурсивное решение в копилку (:

var data = [['a', 'b', 'c'], 'r', 't', ['g', ['j', 'u', 'i'], 'y'], 'i']; 
 
function merge(a){ 
 
   var result = []; 
    
   a.forEach(function(item){ 
      if(Array.isArray(item)){ 
         result = result.concat(merge(item));  
      } 
       
      else{ 
          result.push(item); 
      } 
   }); 
    
   return result; 
} 
 
 
var out = merge(data); 
 
console.log(JSON.stringify(out));

Answer 4

Если нет внутри объектов, то...

function get1DArray(arr){ 
    return arr.join().split(","); 
} 
 
var input = [['a', 'b', 'c'], 'r', 't', ['g', ['j', 'u', 'i'], 'y'], 'i']; 
console.log(get1DArray(input));

Вроде работает.

READ ALSO
Как убрать скролл браузера при открытии меню, а после закрытия обратно его включить?

Как убрать скролл браузера при открытии меню, а после закрытия обратно его включить?

Как убрать скролл браузера при открытии меню, а после его закрытия обратно его включить? Нашел вот такое решение, но не знаю как выключить...

309
Edge сбрасывает css страницы

Edge сбрасывает css страницы

На сайте http://wwwklerk

351
Как проверить hover через jQuery?

Как проверить hover через jQuery?

Мне нужно чтобы при наведении на элемент в одном блоке, добавлялся класс элементу из другого блока и удалялся если курсор "уходит с элемента"

389
Добавить GET переменную по клику в URL

Добавить GET переменную по клику в URL

Есть код, он добавляет отпечаток в форму регистрации:

419