我是JavaScript的初学者。最近我正在尝试在Google Map中开发关联应用程序。但我遇到了一个奇怪的问题。
请参阅以下代码。
<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>
由于pos4
的值与pos2
相同,如果数组中位置确实存在,则打印结果应为“是”。 然而,它在屏幕上打印“否”。
我尝试打印pos4
和pos2
的值。我发现都是相同的,我不知道为什么这个检查失败了。 有没有解决问题的方案?
答案 0 :(得分:1)
根据Google Maps API V3 docs,所有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"
答案 1 :(得分:0)
默认indexOf
在对象比较中不起作用,因为2个对象永不相等(只有具有相同的引用时才会出现),{ {3}}
您可以根据as pointed out here创建indexOf
功能。并比较对象中的lat()
和lng()
,this post。
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;
}
注意:由于@ greg-burghardt sugested,您可以将this[i].lat() === elem.lat() && this[i].lng() === elem.lng()
替换为this[i].equals(elem)
。
<强>用法:强>
var buf = [];
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;
}
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);
var status = "";
if ( buf.indexOf(pos4) != -1 )
status += 'yes - ' + pos4 + '- index ' + buf.indexOf(pos4);
else
status += "no";
var pos5 = new google.maps.LatLng(1, 4);
status += '<br />';
if ( buf.indexOf(pos5) != -1 )
status += 'yes - ' + pos5 + '- index ' + buf.indexOf(pos4);
else
status += 'no - ' + pos5;
document.getElementById('status').innerHTML = status;
<head>
<script src = "http://maps.googleapis.com/maps/api/js"></script>
</head>
<body>
<div id="status"></div>
<body>