我有一系列标记
var markers = [{
"longititude": "78.377670",
"latitude": "17.439669",
"name": "one"
}, {
"longititude": "78.377617",
"latitude": "17.439692",
"name": "two"
}, {
"longititude": "78.377644",
"latitude": "17.439674",
"name": "three"
}, {
"longititude": "78.377665",
"latitude": "17.439667",
"name": "four"
}]
我发送纬度和经度并检查它是否落在一定距离的范围内。
作为对该函数的回应,我期待总计数以及它所经历的纬度和经度值。
但我总是得到数组的最后一个元素
http://jsfiddle.net/1nm9adn3/1/
您能否告诉我如何解决此问题。
答案 0 :(得分:1)
每次都会替换函数中的纬度和经度值。因此,当循环结束时,var latitude
和var longitude
将始终具有数组中最后一个元素的值。当if子句检测到正确的标记时,您应该保存i
的值,然后返回markers[i].latitude
。
答案 1 :(得分:1)
你的意思是这样的:http://jsfiddle.net/1nm9adn3/4/
function fetchValue(markers, lat, lng) {
var result = {
count: 0,
values: []
};
for (var i = 0; i < markers.length; i++) {
var latitude = markers[i].latitude;
var longitude = markers[i].longititude;
if (lat == latitude && lng == longitude) {
result.count++;
result.values.push({latitude: latitude, longitude: longitude});
}
else if (Math.sqrt(Math.pow((lat - latitude), 2) + Math.pow((lng - longitude), 2)) < 0.000005) {
result.count++;
result.values.push({latitude: latitude, longitude: longitude});
}
}
return result;
}
答案 2 :(得分:1)
我不确定你为什么要用第一个匹配的元素而不是最近的元素来回应,但是无论如何这都可以做到:
function fetchValue(markers, lat, lng) {
var count = 0;
var firstMatchingLatitude = null;
var firstMatchingLongititude = null;
for (var i = 0; i < markers.length; i++) {
var latitude = markers[i].latitude;
var longitude = markers[i].longititude;
if (lat == latitude && lng == longitude) {
if(firstMatchingLatitude == null){
firstMatchingLatitude = latitude;
firstMatchingLongititude = longitude;
}
count++;
}
else if (Math.sqrt(Math.pow((lat - latitude), 2) + Math.pow((lng - longitude), 2)) < 0.000005) {
if(firstMatchingLatitude == null){
firstMatchingLatitude = latitude;
firstMatchingLongititude = longitude;
}
count++;
}
}
var result = {
count: count,
latitude: firstMatchingLatitude,
longitude: firstMatchingLongititude
};
return result;
}
技巧是你在for循环的每次重复中设置纬度和经度。哦,这是&#34;纬度&#34;而不是&#34; latititude&#34; ;)
祝你好运!!
答案 3 :(得分:1)
var markers = [
{
"longititude": "78.377665",
"latitude": "17.439669",
"name": "one"
},
{
"longititude": "78.377617",
"latitude": "17.439692",
"name": "two"
},
{
"longititude": "78.377644",
"latitude": "17.439674",
"name": "three"
},
{
"longititude": "78.377665",
"latitude": "17.439667",
"name": "four"
}
]
function fetchValue(markers, lat, lng) {
var count = 0;
var latitude = [];
var longitude =[];
for (var i = 0; i < markers.length; i++) {
var latit = markers[i].latitude;
var longit = markers[i].longititude;
if (lat == latit && lng == longit) {
count++;
latitude.push(latit);
longitude.push(longit);
}
else if (Math.sqrt(Math.pow((lat - latitude), 2) + Math.pow((lng - longitude), 2)) < 0.000005) {
count++;
}
}
var result = {
count: count,
latitude: latitude,
longitude: longitude
};
return result;
}
var resltval = fetchValue(markers,17.439669,78.377665);
alert(JSON.stringify(resltval));