Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 部分展平多维数组_Javascript_Arrays_Multidimensional Array_Coordinates - Fatal编程技术网

Javascript 部分展平多维数组

Javascript 部分展平多维数组,javascript,arrays,multidimensional-array,coordinates,Javascript,Arrays,Multidimensional Array,Coordinates,我有一系列的轮廓和要点。对于轮廓,调用outline.geometry.coordinates生成多维坐标数组: [[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724], ...]] [-72.78630766033722,41.767349642115724] 对于点,调用point.geometry.coordinates生成一个一维坐标数组: [[[-72.68639118392

我有一系列的轮廓和要点。对于轮廓,调用
outline.geometry.coordinates
生成多维坐标数组:

[[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724], ...]] 
[-72.78630766033722,41.767349642115724]
对于点,调用
point.geometry.coordinates
生成一个一维坐标数组:

[[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724], ...]] 
[-72.78630766033722,41.767349642115724]
点和轮廓都保存在一个阵列中。我希望最终得到所有坐标对的数组,例如:

 [[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724],[-72.78630766033722,41.767349642115724], ...]]

我尝试过的

首先,我尝试获取所有坐标,其中
几何体
是我的轮廓和点数组:

var coordinates = geometries.map(function(outline) {return outline.geometry.coordinates});
毫不奇怪,这会创建以下数组:

[[[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724], ...]], [-72.78630766033722,41.767349642115724]]

展平这个数组会导致成对坐标对的丢失,所以我不完全确定如何进行。有什么想法吗?

一种方法是标准化坐标输出。如果
outline
s为您提供一个成对坐标的数组,您可以让
point
s通过将其包装为单个元素数组来执行相同的操作

大纲

[[a, b], [c, d], [e, f], ...]

[[a, b]]
这样,当您组合它们时,它们都具有相同的形状/维度。在这一点上,您可以使用@dandavis'技术将其展平一次


如果您能够使用
instanceof
来确定对象是轮廓还是点,则可以使用以下命令

var coordinates = geometries.map(function(outline_or_point) {
  return outline_or_point instanceof outline ? outline.geometry.coordinates : [point.geometry.coordinates];
});
如果
instanceof
不可能,您可以进行一些duck键入,例如,通过检查
outline\u或\u point
是数组还是数字

var coordinates = geometries.map(function(outline_or_point) {
  return typeof outline_or_point[0] == 'number' ? [point.geometry.coordinates] : outline.geometry.coordinates;
});
这个怎么样

var geometries = [
    // point
    {
        geometry: {
            coordinates: [1, 2],
        },
    },

    // outline
    {
        geometry: {
            coordinates: [
                [
                    [3, 4],
                    [5, 6],
                ],
            ],
        },
    },
];

var coordinates = geometries.map(function(outline) {
  var coords = outline.geometry.coordinates;
  if (typeof coords[0] === 'number') {
    return [coords];
  } else {
    return coords[0];
  }
}).reduce(function (prev, next) {
    return prev.concat(next);
}, []);

console.log(coordinates);

// Output:
// [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ]

arr.reduce((a,b)=>a.concat(b))
展平1级,修复了最后一个示例您是否能够识别轮廓与点,例如,使用
instanceof
几何图形是否只包含
轮廓
或者是混合的?@dandavis我得到的是
a.conct不是一个函数
?@dandavis:这不会导致
[[a,b],[c,d],e,f]
其中
e
f
不成对吗?@arcyqwerty:mmm。是的,可能。OP应该弹出最后一个,然后展平,然后按下,这似乎会产生一个数组的格式:
[[[1,2],[3,4],[5,6],[[1,2],[3,4],[5,6],[1,2],[1,2]
我的代码包括输入和输出都在上面。也许你的输入和我的不同?啊,是的,就是这样。我们输入的唯一区别是我的轮廓有
坐标:[[3,4],[5,6],]
啊。我建议
else{return coords[0];}
。当然,除非您希望输出像
[[1,2],[3,4],[5,6]]]
(根据该建议编辑)