根据对多个数组唯一的元素创建一个新数组

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

本文关键字:数组 新数组 一个 创建 唯一 元素      更新时间:2023-09-26

下面是我的一段代码:

            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米),则将它们视为相同的数字(纬度和经度是浮点数,比较它们是否相等是有问题的)

基于地理编码的答案。使用了以下代码:

  //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}