javascript – 减少和连接(或深度展平)数组数组的最快方法

前端之家收集整理的这篇文章主要介绍了javascript – 减少和连接(或深度展平)数组数组的最快方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
作为输入,我收到两种类型的数组数组,这些数组由x和y坐标组成,表示多边形和多边形几何.

array1表示简单多边形几何的坐标,array2表示多面几何:

var array1 = [[[0,0],[0,1],2]]]

var array2 = [[[[0,2]],[[1,[1,2]]]]

多面体几何体(array2)由比简单多边形几何体(array1)深一层的数组数组表示.

我想展平这些数组以获得那些输出

if input is array1 type : array1_out = [[0,1,2]]

   if input is array2 type : array2_out = [[0,2],2]]

我的功能如下:

for (i=0; i < array_input.length; i++){
    var array_concat = array_input[i].reduce(function(a,b){
        return a.concat(b);
    });
}

使用上面的这个函数,array1的输出是正确的,但array2的输出如下:

[[[0,2]]]

是否有一个功能可以深度压扁这两种类型的数组?

编辑:性能真的很重要,因为阵列非常大

解决方法

您可以在 Underscorelodash库中找到许多用于操作数组和集合的有用工具.
var arrays1 = [[[0,2]]];
var array2 = [[[[0,]];

var array1_out = flattenSimple(arrays1);
console.log(JSON.stringify(array1_out));

var array2_out = flattenMultiple(array2);
console.log(JSON.stringify(array2_out));

function flattenSimple(array_input) {    
    return _.flatten(array_input);
}

function flattenMultiple(array_input) {
    array_input = array_input[0];
    return array_input.map(function(a) {
        return _.flatten(a);
    });
}

将产生您正在寻找的输出.我把它分成了每个类型的flatten fn,但你可以使用带有标志或更复杂逻辑的相同fn来知道你正在使用哪种类型.

Fiddle

原文链接:https://www.f2er.com/js/157064.html

猜你在找的JavaScript相关文章