Javascript使用嵌套for和splice

时间:2017-03-28 02:35:38

标签: javascript arrays for-loop

我也在寻找多边形中的点。

所以我有一个带有点对象的数组和一个带有多边形对象的数组。

我想迭代我的点数组,然后遍历多边形数组并查看该点是否在该数组中。如果该点在数组中,我想从点数组中删除该点,因为一个点只能在一个多边形中。

所以我尝试使用这个功能:

function pointsInPolygons(features, points) {
    var pointCopy = $.extend(true, [], points.features);
    for (var i = 0; i < pointCopy.length; i++) {
        var point = pointCopy[i];
        for (var j = 0; j < features.features.length; j++) {
            var feature = features.features[j];
            if (isPoly(feature) && gju.pointInPolygon(point.geometry, feature.geometry)) {
                feature.properties.ratings.push(point.properties.rating);
                pointCopy.splice(i, 1);
                i--;
            }
        }
    }
}

但是在经历了内在之后,功能正在消失。我尝试了同样没有拼接和减少我。但它仍然是相同的行为。

所以问题是如何再次进入外部?

1 个答案:

答案 0 :(得分:0)

实际上,您不必从数组中删除该项,您对points的当前for循环只会迭代一次。这是对你正在做的事情的一种平坦的方法。

function pointsInPolygons(features, points){
  let pointsCopy = points.features.slice();
  let check = (point,feature) => isPoly(feature) && gju.pointInPolygon(point.geometry, feature.geometry);
  let isInPolygon = point => features.find(check.bind(null, point));

  pointsCopy.forEach(point => {
    let feature = isInPolygon(point);
    if (!!feature) {
      feature.properties.ratings.push(point.properties.rating);
    }
  });
}