检查值是否在嵌套数组内的更好方法 - Javascript
better way to check if a value is inside of a nested array - Javascript
我正在与 Google 个地点 API 合作。我注意到当我进入机构时并不总是有邮政编码、国家、城市,如果有,它们也不总是在 address_components 数组中的相同索引中。
现在,我试图找出它是否具有上面列出的任何内容,如果它具有 return 值。有没有更好的方法来实现这个:
getPlaceTypeValue(addressComponents: Places[], type: string): string {
let value = null;
for (const [i] of addressComponents.entries()) {
if (addressComponents[i].types.includes(type)) {
value = addressComponents[i].long_name;
break;
}
}
return value;
}
console.log(this.placesService.getPlaceTypeValue(
address.address_components, 'postal_code'));
//Returns 77500
数据
[
{
"long_name": "Hotel Zone",
"short_name": "Hotel Zone",
"types": [
"sublocality_level_1",
"sublocality",
"political"
]
},
{
"long_name": "Kukulcan Boulevard",
"short_name": "Kukulcan Boulevard",
"types": [
"neighborhood",
"political"
]
},
{
"long_name": "Cancún",
"short_name": "Cancún",
"types": [
"locality",
"political"
]
},
{
"long_name": "Quintana Roo",
"short_name": "Q.R.",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "Mexico",
"short_name": "MX",
"types": [
"country",
"political"
]
},
{
"long_name": "77500",
"short_name": "77500",
"types": [
"postal_code"
]
}
]
首先,我会改变这个:
for (const [i] of addressComponents.entries()) {
if (addressComponents[i].types.includes(type)) {
对此:
for (const {types} of addressComponents) {
if (types.includes(type)) {
或者,如果您喜欢更 功能性 的方法,请在单行 return
语句中使用 Array#find
:
return (addressComponents.find(({types}) => types.includes(type)) || {}).long_name || null;
仅当 undefined
的 return 值不适合您时才需要 || null
部分。
速度
如果在您的问题中 "better" 表示 "faster",那么请使用老式的 for
循环:
for (let i = 0, len = addressComponents.length; i < len; i++) {
if (addressComponents[i].types.includes(type)) {
我正在与 Google 个地点 API 合作。我注意到当我进入机构时并不总是有邮政编码、国家、城市,如果有,它们也不总是在 address_components 数组中的相同索引中。
现在,我试图找出它是否具有上面列出的任何内容,如果它具有 return 值。有没有更好的方法来实现这个:
getPlaceTypeValue(addressComponents: Places[], type: string): string {
let value = null;
for (const [i] of addressComponents.entries()) {
if (addressComponents[i].types.includes(type)) {
value = addressComponents[i].long_name;
break;
}
}
return value;
}
console.log(this.placesService.getPlaceTypeValue(
address.address_components, 'postal_code'));
//Returns 77500
数据
[
{
"long_name": "Hotel Zone",
"short_name": "Hotel Zone",
"types": [
"sublocality_level_1",
"sublocality",
"political"
]
},
{
"long_name": "Kukulcan Boulevard",
"short_name": "Kukulcan Boulevard",
"types": [
"neighborhood",
"political"
]
},
{
"long_name": "Cancún",
"short_name": "Cancún",
"types": [
"locality",
"political"
]
},
{
"long_name": "Quintana Roo",
"short_name": "Q.R.",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "Mexico",
"short_name": "MX",
"types": [
"country",
"political"
]
},
{
"long_name": "77500",
"short_name": "77500",
"types": [
"postal_code"
]
}
]
首先,我会改变这个:
for (const [i] of addressComponents.entries()) {
if (addressComponents[i].types.includes(type)) {
对此:
for (const {types} of addressComponents) {
if (types.includes(type)) {
或者,如果您喜欢更 功能性 的方法,请在单行 return
语句中使用 Array#find
:
return (addressComponents.find(({types}) => types.includes(type)) || {}).long_name || null;
仅当 undefined
的 return 值不适合您时才需要 || null
部分。
速度
如果在您的问题中 "better" 表示 "faster",那么请使用老式的 for
循环:
for (let i = 0, len = addressComponents.length; i < len; i++) {
if (addressComponents[i].types.includes(type)) {