根据JavaScript中的子值从n维数组中选择一个值

时间:2012-07-23 12:34:18

标签: javascript jquery arrays google-maps-api-3

我试图根据其中一个孩子的值来选择数组中的元素。

使用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

我编写了以下代码,该代码使用上述arraykey作为参数进行查找,并且似乎运行良好:

function getAddressComponent(key, result) {

  var rtn;

  $.each(result,function(index,value){
    if( result[index].types[0] == key ) rtn = result[index].long_name;
  });

  return rtn;    
}

但是想知道是否有人能提出更好的方法,因为我已经看到它采取了几种不同的方式,并希望使用最佳方法。

2 个答案:

答案 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数组的第一个成员 - 但我想这是预期的行为。