繁体   English   中英

从几个数组唯一的元素创建一个新数组

[英]Create a new array from the elements that are unique for several arrays

这是我的一段代码:

            var things = new Object();
            things.location = new Array();
            for (var i = 0; i < clickedMarkers.length; i++) {
                var mark = clickedMarkers[i],
                    markLatitude =  mark.position.lat(),
                    markLongitude =  mark.position.lng();

                things.location.push({
                    'lat': markLatitude,
                    'lng': markLongitude
                });
            }

因此,我们有以下几对:

{lat:53.5412,lng:9.994180000000028},{lat:53.0862838,lng:8.789075099999991},   {lat:53.0738902,lng:8.805211800000052},{lat:53.5412,lng:9.994180000000028},{lat:53.5412,lng:9.994180000000028}

我使用以下代码通过“ lat”比较每对元素:

            var arr = {};

            for ( var j=0, len=things.location.length; j < len; j++ )
                arr[things.location[j]['lat']] = things.location[j];

            things.location = new Array();

            for ( var key in arr )
                things.location.push(arr[key]);

但是正确的方法是比较lat和lng对中的两个元素是否不同,因为对于大对的数组-lat可以相同,但是lng-不同。

如何比较每对的两个元素?

选项:

  1. 使用google.maps.LatLng .equals方法
  2. 使用google.maps.geometry.spherical.computeDistanceBetween方法,如果距离小于某个小数(例如1.0米),则将它们视为相同(纬度和经度是浮点数,比较它们是否相等是有问题的)。

基于geocodezip的答案。 使用以下代码:

  //get all markers for the cluster;
  var clickedMarkers = cluster.getMarkers();

  //get the base point to compare all other markers
  var base = new google.maps.LatLng(clickedMarkers[0].position.lat(), clickedMarkers[0].position.lng());

            var total = 0;
            for (var i = 0; i < clickedMarkers.length; i++) {
                var mark = clickedMarkers[i],
                    markLatitude =  mark.position.lat(),
                    markLongitude =  mark.position.lng();
                var _coordinates =  new google.maps.LatLng(markLatitude,   markLongitude);

                var point = google.maps.geometry.spherical.computeDistanceBetween(_coordinates, base);
                total= total + point;
            }

            console.log('total', total);

            if (total == 0)
           {some action}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM