如何从数组中获取第一个匹配元素

时间:2015-08-06 14:14:16

标签: javascript

我有一系列标记

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/

您能否告诉我如何解决此问题。

4 个答案:

答案 0 :(得分:1)

每次都会替换函数中的纬度和经度值。因此,当循环结束时,var latitudevar 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));