2015-11-28 5 views
2

Рабочий контекст моего вопроса: визуализация данных. Правильно преобразует вложенные массивы целых чисел в плоский массив целых чисел таким образом?Преобразование вложенных массивов целых чисел в плоский массив целых чисел - javascript

var inputArray = [[1, 2, [3]],4,[5, [6, [7,8],[9]]],10]; 

var inputArrayStr = inputArray.toString(); 
var outputArrayInt = JSON.parse("[" + inputArrayStr + "]"); 

console.log(outputArrayInt); // --> [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 
+0

_ "Это правильно трансформирующий вложенные массивы целых чисел в плоский массив целых чисел таким образом ? »_ Что ожидается результат? – guest271314

+0

[[1, 2, [3]], 4, [5, [6, [7,8], [9]]], 10] -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] – Alex

+0

Ну, это работает, но в зависимости от того, где это используется, вы можете избежать строковых манипуляций для такой работы. –

ответ

2

Предлагаю использовать специальную функцию для выполнения этой задачи.

function flat(a) { 
 
    var b = []; 
 
    a.forEach(function (c) { 
 
     if (Array.isArray(c)) { 
 
      b = b.concat(flat(c)); 
 
     } else { 
 
      b.push(c); 
 
     } 
 
    }); 
 
    return b; 
 
} 
 

 
var inputArray = [[1, 2, [3]], 4, [5, [6, [7, 8], [9]]], 10], 
 
    outputArray = flat(inputArray); 
 

 
document.write('<pre>' + JSON.stringify(outputArray, 0, 4) + '</pre>');

0

Вы можете просто сделать это:

входной массив: var inputArray = [[1, 2, [3]],4,[5, [6, [7,8],[9]]],10];

результат в виде строки:

var stringResult=inputArray.toString(); 

stringResult => «1,2, 3,4,5,6,7,8,9,10 "

результат в виде массива:

var stringArray=stringResult.split(','); 
var arrayResult=[]; 
for(var s in stringArray){ 
arrayResult.push(parseInt(s)); 
} 

arrayResult => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

0

Вы можете плоским шаг массива за шагом используя Array.prototype.concat.apply.

function flat(arr) { 
    var result = arr; 
    while(result.some(Array.isArray)) { 
     result = Array.prototype.concat.apply([], result); 
    } 
    return result; 
} 

console.log(flat([[1, 2, [3]], 4, [5, [6, [7, 8], [9]]], 10])); 
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 

Для объяснения код выше:

Array.prototype.concat.apply([], [[1, 2, [3]],4,[5, [6, [7, 8],[9]]], 10]) ; 

в основном так же, как:

[].concat([1, 2, [3]], 4,[5, [6, [7, 8], [9]]], 10); 
Смежные вопросы