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

时间:2016-07-11 18:27:07

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

使用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这样的库。

2 个答案:

答案 0 :(得分:1)

首先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




答案 1 :(得分:0)

it is possible to do it by using 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