簡體   English   中英

如何檢查 object 數組中的數組中是否存在值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM