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

Javascript 如何从数组中获取第一个匹配元素,javascript,Javascript,我有一系列的记号笔 var markers = [{ "longititude": "78.377670", "latitude": "17.439669", "name": "one" }, { "longititude": "78.377617", "latitude": "17.439692", "name": "two" }, { "longititude": "78.377644", "latitude": "17.439

我有一系列的记号笔

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"
}]
我正在发送纬度和经度,并检查它是否在一定的距离范围内

作为对函数的响应,我希望得到总计数以及它所属的纬度和经度值

但我总是得到数组的最后一个元素


请告诉我如何解决此问题。

您每次都在函数中替换纬度和经度值。因此,在循环结束时,
var纬度
var经度
将始终具有数组中最后一个元素的值。如果if子句检测到正确的标记,则应保存
i
的值,然后返回
markers[i]。latitude

您的意思是:

函数获取值(标记、lat、lng){
变量结果={
计数:0,
值:[]
};
对于(var i=0;i
我不知道为什么要用第一个匹配的元素而不是最近的元素来响应,但这还是可以做到的:

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;
}
函数获取值(标记、lat、lng){
var计数=0;
var firstMatchingLatitude=null;
var firstMatchingLongititude=null;
对于(var i=0;i
诀窍是在for循环的每次重复中设置纬度和经度。哦,是“纬度”而不是“纬度”;)

祝你好运

var标记=[
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));
{ “朗吉提多”:“78.377665”, “纬度”:“17.439669”, “名称”:“一” }, { “朗吉提多”:“78.377617”, “纬度”:“17.439692”, “姓名”:“两个” }, { “朗吉提多”:“78.377644”, “纬度”:“17.439674”, “姓名”:“三” }, { “朗吉提多”:“78.377665”, “纬度”:“17.439667”, “姓名”:“四” } ] 函数值(标记、lat、lng){ var计数=0; var纬度=[]; var经度=[]; 对于(var i=0;i
最好直接在您的问题中发布Javascript函数。简单地说,我需要第一个值,但现在我得到的是最后一个值。看这个版本的fiddle,我无法实现这一点,您能告诉我怎么做吗
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));