[英]How to check if a value exists in an array in an object array?
I have an object in which extended address information (street name, zip code, house number, etc.).我有一个 object,其中包含扩展地址信息(街道名称、zip 代码、门牌号等)。 I need to check for the existence of a street, a house, and if they do not exist, display an error.
我需要检查街道、房子是否存在,如果它们不存在,则显示错误。 The array is below:
数组如下:
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",
}
You can search the address components array for some element entry that has a types
array with every value you want it to contain.您可以在地址组件数组中搜索某些元素条目,该元素条目具有
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);
If you want to search that every key term is included by some element then use:如果您想搜索某个元素是否包含每个关键术语,请使用:
[/* 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)) ));
You could build a function where you pass in the required values and then reduce the types to a single array.您可以构建一个 function 在其中传入所需的值,然后将类型减少为单个数组。 From there you loop over your required values to ensure they are in the actual values:
从那里你循环你需要的值以确保它们在实际值中:
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.