Javascript 从js中的嵌套对象提取键值

Javascript 从js中的嵌套对象提取键值,javascript,object,Javascript,Object,我应该如何从嵌套对象中提取密钥如果我输入孟买,我想得到马哈拉施特拉邦和印度。如果用户输入像“Dallas”这样的值,那么它应该返回德克萨斯州和美国 obj = { "India": { "Karnataka": ["Bangalore", "Mysore"], "Maharashtra": ["Mumbai

我应该如何从嵌套对象中提取密钥如果我输入孟买,我想得到马哈拉施特拉邦和印度。如果用户输入像“Dallas”这样的值,那么它应该返回德克萨斯州和美国

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

编辑:重新阅读@iAmOren的问题和评论后

让我们在树中递归。这将适用于任何树深度。它还将找到一个州或一个国家(或者换句话说,任何级别的任何键或值)

编辑2:再次感谢您的反馈,@iAmOren。现在,在我的上一个解决方案中,它将查找所有内容,而不是“先查找”

var obj={
“印度”:
{
“卡纳塔克邦”:[“班加罗尔”、“迈索尔”、“德克萨斯州”],
“马哈拉施特拉邦”:[“孟买”、“浦那”]
},
“美国”:
{
“德克萨斯州”:[“达拉斯”、“休斯顿”],
“IL”:[“芝加哥”、“极光”、“浦那”]
}
};
var getParents=函数(o,toFind,found,path){
如果(路径===未定义)路径=[];
for(变量输入o){
//匹配城市或父节点(国家或州)。
if(o[key]==toFind | | key==toFind){
var aFoundPath=Object.assign([],path);
向前推(toFind);
found.push(前进路径);
}
否则{
if(o[键]=“对象”的类型){
路径。按(键);
getParents(o[key],toFind,found,path);
path.pop();
}
}
}
};
var printParents=函数(toFind){
var流出=[];
获取父对象(obj、toFind、outFound);
控制台日志(输出);
};
打印父母(“孟买”);
印刷父母(“普纳”);
打印父母(“德克萨斯州”)这是我对一个(非常)类似问题的回答。
它返回国家和州的数组

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;
}

可能的落选选民注意:
请详细解释原因。
不要做一个巨魔。

谢谢大家!

您可以在对象中循环并通过匹配值找到相应的关键点:

var obj={
“印度”:
{
“卡纳塔克邦”:[“班加罗尔”、“迈索尔”],
“马哈拉施特拉邦”:[“孟买”、“浦那”]
},
“美国”:
{
“德克萨斯州”:[“达拉斯”、“休斯顿”],
“IL”:[“芝加哥”、“极光”、“浦那”]
}
}
国家、州;
var city=‘孟买’;
用于(obj中的var k){
对于(对象[k]中的变量j){
if(obj[k][j].包括(城市)){
国家=k;
状态=j;
}
}
}

console.log(国家+,+州)有人问了一个类似的问题,只是用了“Pune”-是你吗?看,你已经接受了一个不起作用的答案(在发表此评论时)。试着用它来寻找“双关语”。另外,它的可重用性不强-函数更好-请参阅其他人和我的答案。我想,也许OP需要一种通用方法=输入可以是任何东西。谢谢你向我解释这个问题。我已经更新了我的答案。非常好!你正在返回一堆父母!然而,
console.log(getParents(obj,“Pune”)
仅返回
[“马哈拉施特拉邦”、“印度”]
-关于“IL,美国”呢?我在底部放了4个测试值。芝加哥=>返回IL,USASudip,查看搜索“普纳”-如我最后的评论。。。另外,请看我的答案——不同的方法。