javascript - 从多个数组唯一的元素创建一个新数组

标签 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.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 米),则将它们视为相同(纬度和经度是 float ,比较它们是否相等是有问题的)。

关于javascript - 从多个数组唯一的元素创建一个新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36989127/

相关文章:

c++ - 将 uint64_t 截断为 uint8_t[i] 时是否应该使用位掩码?

javascript - 将文本动态添加到相同的 ID

javascript - 事件监听器,一个 css 转换结束,另一个开始

javascript - 编写内联 javascript if 语句 onclick 或任何其他 JS 事件?

java - 在处理中 append 到数组时出现问题

angularjs - 您能否使用 Ionic Framework 通过一个代码库构建混合移动应用程序和桌面 Web 应用程序?

angularjs - 在angularjs ui-router中的状态内的两个ui-views之间共享数据

javascript - Google 饼图更改文本对齐方式

javascript - Google Maps API v3 - 为什么没有事件上下文?

ios - 检查 NSMutableArray 是否包含给定值