将嵌套的整数数组转换为平面整数数组-javascript

Transform nested arrays of integers into a flat array of integers - javascript

本文关键字:整数 数组 平面 -javascript 转换 嵌套      更新时间:2023-09-26

我的问题的工作上下文是数据可视化。以这种方式将嵌套的整数数组转换为平面整数数组是正确的吗?

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 ]

实际上:

Array#flatInfinity作为所有级别的平面阵列的参数:

const
    input = [[1, 2, [3]], 4, [5, [6, [7, 8], [9]]], 10],
    output = input.flat(Infinity);
console.log(output);


老答案:

我建议为这项任务使用一个特殊的函数。

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>');

您可以使用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();

字符串结果=>"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]

现代

const flattenArray = (arr) => arr.reduce((prev, curr) => (Array.isArray(curr) ? prev.concat(flattenArray(curr)) : prev.concat(curr)), []);