我试图根据其中一个孩子的值来选择数组中的元素。
使用Google Maps API地理编码请求返回的结果作为示例,我们有一个表单数组:
{
"address_components": [
{
"long_name": "Renshaw St",
"short_name": "Renshaw St",
"types": [
"route"
]
},
{
"long_name": "Eccles",
"short_name": "Eccles",
"types": [
"locality",
"political"
]
},
{
"long_name": "Greater Manchester",
"short_name": "Gt Man",
"types": [
"administrative_area_level_2",
"political"
]
},
{
"long_name": "United Kingdom",
"short_name": "GB",
"types": [
"country",
"political"
]
},
{
"long_name": "M30 0PQ",
"short_name": "M30 0PQ",
"types": [
"postal_code"
]
},
{
"long_name": "Manchester",
"short_name": "Manchester",
"types": [
"postal_town"
]
}
],
"formatted_address": "Renshaw St, Eccles, Manchester, Greater Manchester M30 0PQ, UK",
"geometry": {
"bounds": {
"northeast": {
"lat": 53.48266090000001,
"lng": -2.35206530
},
"southwest": {
"lat": 53.48128999999999,
"lng": -2.35324410
}
},
"location": {
"lat": 53.4822450,
"lng": -2.35294730
},
"location_type": "GEOMETRIC_CENTER",
"viewport": {
"northeast": {
"lat": 53.48332443029150,
"lng": -2.351305719708498
},
"southwest": {
"lat": 53.48062646970850,
"lng": -2.354003680291502
}
}
},
"types": [
"route"
]
}
我想选择元素address_component->long_name
等于我指定值的type
。
我编写了以下代码,该代码使用上述array
和key
作为参数进行查找,并且似乎运行良好:
function getAddressComponent(key, result) {
var rtn;
$.each(result,function(index,value){
if( result[index].types[0] == key ) rtn = result[index].long_name;
});
return rtn;
}
但是想知道是否有人能提出更好的方法,因为我已经看到它采取了几种不同的方式,并希望使用最佳方法。
答案 0 :(得分:1)
你的代码不长......哈哈。您可以立即返回结果,因为一旦找到它,您就可以离开循环。而且我没有研究jQuery forEach,但它不能比下面的代码更短,我想。
这是怎么回事?
function findAdressComponentByLongName( findString ) {
var addressComponents = data.address_components,
i = 0,
ln = addressComponents.length;
for( ; i < ln; i++ ) {
if( addressComponents[ i ].long_name == findString ) {
return addressComponents[ i ];
}
}
}
答案 1 :(得分:1)
没有理由使用jQuery.each,这里的正常for循环会更短。
function getNameByFirstType(key, result) {
for (var i=0; i<result.length; i++)
if (result[i].types[0] == key)
return result[i].long_name;
return false;
}
getNameByFirstType("country", data.address_components);
另外,我不确定为什么你只检查types
数组的第一个成员 - 但我想这是预期的行为。