[英]How to check if a value exists in an array in an object array?
我有一個 object,其中包含擴展地址信息(街道名稱、zip 代碼、門牌號等)。 我需要檢查街道、房子是否存在,如果它們不存在,則顯示錯誤。 數組如下:
const obj = {
"address_components": [
{
"long_name": "10",
"short_name": "100",
"types": [
"street_number"
]
},
{
"long_name": "Engelsa street",
"short_name": "Engelsa street",
"types": [
"route"
]
},
{
"long_name": "Saint-Petersburg",
"short_name": "SPB",
"types": [
"locality",
"political"
]
},
{
"long_name": "Russia",
"short_name": "RU",
"types": [
"country",
"political"
]
},
{
"long_name": "194017",
"short_name": "194017",
"types": [
"postal_code"
]
}
],
"formatted_address": "Engelsa street, 100, Saint-Petersburg, Russia, 194017",
}
您可以在地址組件數組中搜索某些元素條目,該元素條目具有types
數組,其中包含您希望它包含的每個值。
obj.address_components.some(({ types }) =>
types.every((type) => [/* list of keys */].includes(type))
);
const obj = { address_components: [ { long_name: "10", short_name: "100", types: ["street_number"] }, { long_name: "Engelsa street", short_name: "Engelsa street", types: ["route"] }, { long_name: "Saint-Petersburg", short_name: "SPB", types: ["locality", "political"] }, { long_name: "Russia", short_name: "RU", types: ["country", "political"] }, { long_name: "194017", short_name: "194017", types: ["postal_code"] } ], formatted_address: "Engelsa street, 100, Saint-Petersburg, Russia, 194017" }; const res = obj.address_components.some(({ types }) => types.every(type => ['country', 'locality'].includes(type))); const res2 = obj.address_components.some(({ types }) => types.every(type => ['country', 'political'].includes(type))); console.log("'country', 'locality'", res); console.log("'country', 'political'", res2);
如果您想搜索某個元素是否包含每個關鍵術語,請使用:
[/* list of keys */].every((key) =>
obj.address_components.some(({ types }) => types.includes(key))
);
const obj = { address_components: [ { long_name: "10", short_name: "100", types: ["street_number"] }, { long_name: "Engelsa street", short_name: "Engelsa street", types: ["route"] }, { long_name: "Saint-Petersburg", short_name: "SPB", types: ["locality", "political"] }, { long_name: "Russia", short_name: "RU", types: ["country", "political"] }, { long_name: "194017", short_name: "194017", types: ["postal_code"] } ], formatted_address: "Engelsa street, 100, Saint-Petersburg, Russia, 194017" }; const res = ["country", "locality"].every((key) => obj.address_components.some(({ types }) => types.includes(key)) ); console.log("'country', 'locality'", res); console.log("'country', 'locality', 'city'", ["country", "locality", "city"].every((key) => obj.address_components.some(({ types }) => types.includes(key)) ));
您可以構建一個 function 在其中傳入所需的值,然后將類型減少為單個數組。 從那里你循環你需要的值以確保它們在實際值中:
const obj = { "address_components": [{ "long_name": "10", "short_name": "100", "types": [ "street_number" ] }, { "long_name": "Engelsa street", "short_name": "Engelsa street", "types": [ "route" ] }, { "long_name": "Saint-Petersburg", "short_name": "SPB", "types": [ "locality", "political" ] }, { "long_name": "Russia", "short_name": "RU", "types": [ "country", "political" ] }, { "long_name": "194017", "short_name": "194017", "types": [ "postal_code" ] } ], "formatted_address": "Engelsa street, 100, Saint-Petersburg, Russia, 194017", }; function isValidAddress(obj, requiredFields) { // reduce to array of types ['street_number', 'political', ...etc] const actualFields = obj.address_components.reduce((acc, { types }) => { acc.push(...types); return acc; }, []); let valid = true; // loop through the smaller requiredFields to see if its included in the actual requiredFields.forEach((field) => { valid = valid && actualFields.includes(field); }); return valid; } const requiredFields = ['street_number', 'route']; console.log(isValidAddress(obj, requiredFields));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.