使用数组值查找父对象的键值

Use array value to find parent object's key value

本文关键字:对象 键值 查找 数组      更新时间:2023-09-26

使用Google的Maps API,我希望能够通过同一对象中数组中的值来查找对象中键的值。当我在我的页面上"检查元素"以查看控制台时,以下是它在对象结构方面显示的内容:

results: {
    address_components [
        0: Object: {
            long_name: "704",
            short_name: "704",
            types [
                0:"street_number"
            ]
        }
        1: Object {...}
        2: Object {...}
        3: Object {...}
    ]
    place_id:"8AS8D8F8A881C81DA6S6D8"
}

我希望能够在对象中找到"street_number",以便我可以找到也驻留在对象中的"704"的相应值。

棘手的部分是"address_compenents"中的值并不总是以相同的顺序排列,因此我不能只在我的 javascript 中编写results[0].address_components[0].long_name来查找它。在这个项目中,我仅限于javascript,所以任何使用该语言的答案将不胜感激。提前谢谢你!

注意:我不反对使用 lodash 或 underscore 等库,如果它有助于解决问题。

首先find()该项,然后读取必需的属性。

请注意,您还应该考虑并处理响应中没有street_number的情况,此代码段未涵盖这种情况。

var results = {
  address_components: [{
    long_name: "704",
    short_name: "704",
    types: [
      "street_number"
    ]
  }, {
    long_name: "100",
    short_name: "100",
    types: [
      "attribute_a"
    ]
  }, {
    long_name: "200",
    short_name: "200",
    types: [
      "attribute_b"
    ]
  }, {
    long_name: "300",
    short_name: "300",
    types: [
      "attribute_c"
    ]
  }],
  place_id: "8AS8D8F8A881C81DA6S6D8"
}
var streetNumber = results.address_components.find(function(item) {
  return item.types.some(function(subitem) {
    return subitem === 'street_number'
  });
}).long_name;
console.log(streetNumber); // 704

可以使用

Array.filter() 来完成

results: {
    address_components [
        0: Object: {
            long_name: "704",
            short_name: "704",
            types [
                0:"street_number"
            ]
        }
        1: Object {...}
        2: Object {...}
        3: Object {...}
    ]
    place_id:"8AS8D8F8A881C81DA6S6D8"
}

const result = results.address_components.find(item => item.types.indexOf('street_number') > -1)
const longName = result.long_name // 704
const shortName = result.short_name // 704