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