Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将一个LatLng对象与数组中的另一个对象进行比较?_Javascript_Html_Arrays_Google Maps Api 3 - Fatal编程技术网

Javascript 如何将一个LatLng对象与数组中的另一个对象进行比较?

Javascript 如何将一个LatLng对象与数组中的另一个对象进行比较?,javascript,html,arrays,google-maps-api-3,Javascript,Html,Arrays,Google Maps Api 3,我是JavaScript的初学者。最近,我尝试在谷歌地图上开发关联应用程序。但我遇到了一个奇怪的问题 请参考下面的代码 <html> <head> <script src = "http://maps.googleapis.com/maps/api/js"></script> </head> <body> <script> var buf = []; var pos1 = new google.maps.

我是JavaScript的初学者。最近,我尝试在谷歌地图上开发关联应用程序。但我遇到了一个奇怪的问题

请参考下面的代码

<html>
<head>
<script src = "http://maps.googleapis.com/maps/api/js"></script>
</head>

<body>
<script>

var buf = []; 
var pos1  = new google.maps.LatLng(1, 2); buf.push(pos1); 
var pos2  = new google.maps.LatLng(3, 4); buf.push(pos2); 
var pos3  = new google.maps.LatLng(5, 6); buf.push(pos3); 

//initialize a new object here
var pos4  = new google.maps.LatLng(3, 4);

if ( buf.indexOf(pos4) != -1 ) 
    document.write("yes");
else
    document.write("no");

</script>
<body>
</html>

var buf=[];
var pos1=新的google.maps.LatLng(1,2);buf.push(位置1);
var pos2=新的google.maps.LatLng(3,4);buf.推(pos2);
var pos3=新的google.maps.LatLng(5,6);buf.推(pos3);
//在此初始化一个新对象
var pos4=新的google.maps.LatLng(3,4);
if(buf.indexOf(pos4)!=-1)
文件。填写(“是”);
其他的
文件。填写(“否”);
由于
pos4
的值与
pos2
相同,因此如果数组中确实存在位置,则打印结果应为“是”。然而,它在屏幕上打印了“否”


我已尝试打印出
pos4
pos2
中的值。我发现两者都是相同的,我不知道这项检查失败的原因有解决问题的方法吗?

默认的
索引在对象比较中不起作用,因为两个对象永远不相等(它们只有在具有相同的引用时才相等)

您可以根据创建
indexOf
函数。并比较对象中的
lat()
lng()

buf.indexOf = function indexOf(elem){
  index = -1;
  for(var i = 0, len = buf.length; i < len; i++) {
    if (this[i].lat() === elem.lat() 
        && this[i].lng() === elem.lng() ) {
      index = i;
      break;
    }
  }
  return index;
}

根据,所有
LatLng
对象都有一个
equals
方法,可用于比较两个不同的
LatLng
对象:

var p1 = new google.maps.LatLng(3, 10),
    p2 = new google.maps.LatLng(3, 10);

console.log(p1.equals(p2)); // logs "true"

即使两个不同的对象拥有相同的数据,它们也将无法通过相等性测试。例如
vara={test:1},b={test:1};警报(a==b)将导致
false
。您需要测试对象中的值是否相等。在您的示例中,这意味着测试经纬度是否相等。@user3844189很高兴我帮助了您。如果我的解决方案对您有帮助,您可以将其标记为已接受吗?