簡體   English   中英

從js中的嵌套object中提取鍵值

[英]Extract key value from a nested object in js

我應該如何從嵌套的 object 中提取密鑰如果我進入孟買,我想獲得馬哈拉施特拉邦和印度。如果用戶輸入像“達拉斯”這樣的值,那么它應該返回德克薩斯和美國

obj = {
       "India":
          {
            "Karnataka": ["Bangalore", "Mysore"],
            "Maharashtra": ["Mumbai", "Pune"]
          },
      "USA": 
          {
           "Texas": ["Dallas", "Houston"],
           "IL": ["Chicago", "Aurora", "Pune"]
          }
      }

編輯:重讀@iAmOren 的問題和評論后。

讓我們通過樹遞歸。 這適用於任何樹深度。 它還將找到 State 或國家/地區(或者換句話說,任何級別的任何鍵或值)。

編輯 2:再次感謝您的反饋,@iAmOren。 現在,它在我的最后一個解決方案中找到了所有而不是“查找第一個”。

 var obj = { "India": { "Karnataka": ["Bangalore", "Mysore", "Texas"], "Maharashtra": ["Mumbai", "Pune"] }, "USA": { "Texas": ["Dallas", "Houston"], "IL": ["Chicago", "Aurora", "Pune"] } }; var getParents = function(o, toFind, found, path) { if (path === undefined) path = []; for(var key in o) { // Matches city or the parent nodes (country or state). if (o[key] === toFind || key === toFind) { var aFoundPath = Object.assign([], path); aFoundPath.push(toFind); found.push(aFoundPath); } else { if (typeof o[key] == "object") { path.push(key); getParents(o[key], toFind, found, path); path.pop(); } } } }; var printParents = function(toFind) { var outFound = []; getParents(obj, toFind, outFound); console.log(outFound); }; printParents("Mumbai"); printParents("Pune"); printParents("Texas");

這是我對(非常)類似問題的回答。 它返回一個國家數組和 state 數組。

function findCity(city) {
  var result=[];
  for(country in obj) {
    for(state in obj[country]) {
      if(obj[country][state].includes(city)) {
        result.push([country, state]);
      }
    }
  }
  return result;
}

注意可能的投票者:
請詳細解釋原因。
不要成為巨魔。
謝謝!

您可以遍歷 object 並通過匹配值找到相應的鍵:

 var obj = { "India": { "Karnataka": ["Bangalore", "Mysore"], "Maharashtra": ["Mumbai", "Pune"] }, "USA": { "Texas": ["Dallas", "Houston"], "IL": ["Chicago", "Aurora", "Pune"] } } var country, state; var city = 'Mumbai'; for(var k in obj){ for(var j in obj[k]){ if(obj[k][j].includes(city)){ country = k; state = j; } } } console.log(country + ', ' + state);

暫無
暫無

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

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