Преобразование вложенных массивов целых чисел в плоский массив целых чисел - 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 ]
3 ответа
Решение
Я предлагаю использовать специальную функцию для этой задачи.
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>');
Современный способ
const flattenArray = (arr) => arr.reduce((prev, curr) => (Array.isArray(curr) ? prev.concat(flattenArray(curr)) : prev.concat(curr)), []);
Вы можете шаг за шагом выровнять массив, используя 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);
Вы можете просто сделать это:
входной массив: 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]