作为输入,我收到两种类型的数组数组,这些数组由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来知道你正在使用哪种类型.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。