根据该键内数组中的值查找键的值

Find value of key based on value in array within that key

本文关键字:查找 数组      更新时间:2023-09-26
这是一个

脑筋急转弯,所以我正在使用 places API(使用 ember 插件.js所以我真的无法控制版本,除非我想编写自己的版本(它返回的数据如下所示

{
  "address_components": [
    {
      "long_name": "1235",
      "short_name": "1235",
      "types": [
        "street_number"
      ]
    },
    {
      "long_name": "Long Point Road",
      "short_name": "Long Point Rd",
      "types": [
        "route"
      ]
    },
    {
      "long_name": "Mount Pleasant",
      "short_name": "Mt Pleasant",
      "types": [
        "locality",
        "political"
      ]
    },
    {
      "long_name": "Charleston County",
      "short_name": "Charleston County",
      "types": [
        "administrative_area_level_2",
        "political"
      ]
    },
    {
      "long_name": "South Carolina",
      "short_name": "SC",
      "types": [
        "administrative_area_level_1",
        "political"
      ]
    },
    {
      "long_name": "United States",
      "short_name": "US",
      "types": [
        "country",
        "political"
      ]
    },
    {
      "long_name": "29464",
      "short_name": "29464",
      "types": [
        "postal_code"
      ]
    },
    {
      "long_name": "9020",
      "short_name": "9020",
      "types": [
        "postal_code_suffix"
      ]
    }
  ],
  "adr_address": "<span class='"street-address'">1235 Long Point Rd</span>, <span class='"locality'">Mt Pleasant</span>, <span class='"region'">SC</span> <span class='"postal-code'">29464-9020</span>, <span class='"country-name'">USA</span>",
  "formatted_address": "1235 Long Point Rd, Mt Pleasant, SC 29464, USA",
  "geometry": {
    "location": {
      "lat": 32.8570647,
      "lng": -79.8224902
    }
  },
  "icon": "https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
  "id": "f3d33a1a65adc47f7fcf927bb7b18ea91a59fb81",
  "name": "1235 Long Point Rd",
  "place_id": "ChIJkVjE8_5t_ogRvHeqOGZ6cB0",
  "reference": "CpQBjAAAAJEVbHvc6lTEXUvlKHc-wTI3f8g8U6W7i6oARvPyP_2TWTNE7IJQQHTABvbxTtMK6cFxRaksi2xaT7lcQiRB-nv7co7BVzfUMrwqr0YFQZvbLH_OGflPlO---vX4GPTQlDnFinnnixHW7LcRGbPJ4jfgnQ3HnURUCUmCa0WrLTIxiuqEwzIljAGv9K_iUMU9nBIQE57UebJ0CfCs9y0MBBvGeRoUUovGUbFYmgCnPOKVlXhrLQaE5uY",
  "scope": "GOOGLE",
  "types": [
    "street_address"
  ],
  "url": "https://maps.google.com/?q=1235+Long+Point+Rd,+Mt+Pleasant,+SC+29464,+USA&ftid=0x88fe6dfef3c45891:0x1d707a6638aa77bc",
  "vicinity": "Mount Pleasant",
  "html_attributions": []
}

因此,在对象的address_components部分中,您可以看到每个对象都有一个types键,其中包含与它们的类型相关的值,例如 street_numberroute .我想做的是获取对象的short_name(或long_name(,其中type包含street_numberroute等等,并能够将它们设置为变量或以其他方式使用它们。

我尝试了几个地址,它以大致相同的顺序返回它们,但是有时该数组中会多一个或少一个项目,因此它并不总是以完全相同的顺序返回相同数量的项目。因此,与其尝试查看索引并希望这是我期望的正确值,不如根据type所说的内容获得这些值。

我正在使用 ember.js所以如果有一种计算属性方法可以做到这一点会很酷,但我愿意使用 javascript/jQuery 函数来做到这一点。

你可以写一个函数

function getAdress(what, obj) {
    return obj.address_components.filter(function(item) {
        return item.types.indexOf(what) !== -1;
    }).shift();
}

并在需要查找内容时使用它

getAdress('street_number', obj).short_name

小提琴