簡體   English   中英

檢查沒有for循環的對象數組中是否存在值

[英]Check if a value exists in an object array without for loop

"Roles":
{ 
    "0_A":["Developer"],
    "0_B":["Developer"],
    "0_C":["Developer","Tester","Player"],
    "0_D":["Tester"]
}

有沒有辦法檢查'Roles'對象中任何地方是否存在'Player'/'Tester'/'Developer'值? 這是我嘗試的:

let isPlayer= false;
if (response) {
  const k = Object.keys(response["Roles"]);
  for (let index = 0; index < k.length; index++) {
    if (response["Roles"][k[index]].indexOf("Player") > -1) {
      isPlayer= true;
      break;
    }
  }    
}

有沒有辦法做到這一點而無需for循環?

謝謝!

如何使用.find().includes如下所示:

let isPlayer = false;
if (response) {
  const roleNames = Object.values(response["Roles"]);
  const playerFound = roleNames.find(names => names.includes('Player'))
  isPlayer = !!playerFound;  
}

一種替代方法是在輸入對象的Object.Values() 上將 Array.some()Array.includes()結合使用。 以下代碼段顯示了如何執行此操作的示例:

 const response = {}; response["Roles"] = { "0_A":["Developer"], "0_B":["Developer"], "0_C":["Developer","Tester","Player"], "0_D":["Tester"] }; const checkForType = (resp, type) => { let typeExists = false; if (resp) { let roles = resp["Roles"] || {}; typeExists = Object.values(roles).some(arr => arr.includes(type)); } return typeExists; } console.log(checkForType(response, "Player")); console.log(checkForType(response, "Developer")); console.log(checkForType(response, "Team Leader")); 
 .as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;} 

您可以展平 Object.values()返回的2D數組,並使用includes檢查該數組是否包含角色名稱:

 const response = { "Roles": { "0_A": ["Developer"], "0_B": ["Developer"], "0_C": ["Developer", "Tester", "Player"], "0_D": ["Tester"] } } let isPlayer = Object.values(response.Roles) .flat() .includes("Player") console.log(isPlayer) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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