作为输入,我收到两种类型的数组数组,这些数组由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]]]
是否有一个功能可以深度压扁这两种类型的数组?
编辑:性能真的很重要,因为阵列非常大
解决方法
您可以在
Underscore和
lodash库中找到许多用于操作数组和集合的有用工具.
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来知道你正在使用哪种类型.