Javascript 如何将一个LatLng对象与数组中的另一个对象进行比较?
我是JavaScript的初学者。最近,我尝试在谷歌地图上开发关联应用程序。但我遇到了一个奇怪的问题 请参考下面的代码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.
<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很高兴我帮助了您。如果我的解决方案对您有帮助,您可以将其标记为已接受吗?