Javascript 从多个阵列的唯一元素创建新阵列

Javascript 从多个阵列的唯一元素创建新阵列,javascript,arrays,angularjs,google-maps,Javascript,Arrays,Angularjs,Google Maps,下面是我的一段代码: var things = new Object(); things.location = new Array(); for (var i = 0; i < clickedMarkers.length; i++) { var mark = clickedMarkers[i], markLatitude = mark.posit

下面是我的一段代码:

            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”比较每对的元素:

            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]);
  //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}
var-arr={};
for(var j=0,len=things.location.length;j
但正确的方法是比较lat和lng对的两个元素是否不同,因为对于大阵列对,lat可以相同,但lng不同

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

选项:

  • 使用
    .equals
    方法
  • 使用这种方法,如果距离小于某个小数字(比如1.0米),则将它们视为相同的(纬度和经度是浮点数,比较它们是否相等是有问题的)

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

                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]);
    
      //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}
    
    //获取集群的所有标记;
    var clickedMarkers=cluster.getMarkers();
    //获取基点以比较所有其他标记
    var base=new google.maps.LatLng(clickedMarkers[0].position.lat(),clickedMarkers[0].position.lng());
    var合计=0;
    对于(变量i=0;i