用切片排除数组的最后一个元素

时间:2017-07-11 16:32:49

标签: javascript arrays slice

在一个应用程序中我正在使用坐标数组 - 当我将功能点记录到控制台时,我返回了一个包含5个坐标对的数组:

slice()

enter image description here

但是,当我使用var poly = data.features[0].geometry.coordinates.slice(0, -1); console.log(poly) 排除数组的 last 元素时 - 应返回4而不是5 - 我返回一个空白数组

slice()

enter image description here

为什么会发生这种情况,为什么{ "name": ["The name field is required."], "type": ["The type field is required."], "ceiling_amount": ["The ceiling amount field is required."] } 方法在这种情况下不起作用?

3 个答案:

答案 0 :(得分:3)

Poly是一个包含单个元素的数组,你真正想要的是

var poly = data.features[0].geometry.coordinates[0].slice(0, -1); 

答案 1 :(得分:0)

正如您在屏幕截图中看到的那样,

var poly = data.features[0].geometry.coordinates

返回[Array(5)],它本质上是一个二维数组。要排除嵌套数组中的最后一个元素,您需要执行

// coordinates[0] returns the first item in the array which is Array(5)    
var poly = data.features[0].geometry.coordinates[0].slice(0, -1);

要保持二维数组减去最后一个坐标对,您需要递归克隆每个元素。

var poly = data.features[0].geometry.coordinates.map(function(val) {
    return val.slice(0, -1);
});

答案 2 :(得分:0)

看起来您正在使用GeoJSON数据,并且想要在环的末尾去除重复的坐标。在这种情况下,您应该知道您的coordinates数组(具有单个元素且其中包含点数组的数组)实际上可能包含多个元素。在GeoJSON中,polygon与几何中的概念不同。地理“多边形”由外“环”和零个或多个内环组成。 “环”就像几何中的多边形。

多边形中的第一个环 - 您的示例所具有的单个环 - 是“外环”,即您要映射的区域的外边界。任何额外的环都是“内环”,表示从该区域排除的孔。例如,其中有两个湖泊的州或县可能表示为具有三个环的多边形,一个用于外边界,另外两个用于每个湖泊。

另外,在假设geometry.type完全是geometry.coordinates之前,您是否在检查Polygon?您可能会意外收到MultiPolygon,这是一个多边形数组,所以现在您还有一个级别的嵌套数组。 GeoJSON数据源通常会根据需要使用PolygonMultiPolygon

考虑一下犹他州。它有一个外部边界,当然里面有大盐湖(还有一些较小的湖泊)。所以犹他州可以用Polygon代表国家边界的外环和大盐湖和其他湖泊的内环。

但是夏威夷呢?它由几个岛屿组成。国家没有单一的外部边界。每个岛屿都需要自己的外部边界。因此,夏威夷必须由MultiPolygon表示,即Polygon数组的数组。每个岛都有自己的Polygon

无论你写的是什么代码,都应该考虑到所有这些。您应区分PolygonMultiPolygon,对于后者,请处理构成Polygon的每个MultiPolygon。如果你从每个多边形的外环剥去最后一个元素,你可能也希望为内环做到这一点。有关详细信息,请参阅GeoJSON RFC

我会提供一些示例代码来完成所有这些,但我不清楚你正在努力的方向。但这至少应该给你一些指导。