微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐