当JavaScript对象的深度未知时,如何在其中找到键?

当JavaScript对象的深度未知时,如何在其中找到键?,javascript,object,Javascript,Object,如果我有这样一个javascript对象:{a:{b:{c:{…}}}},我如何找到对象中是否有“x”键及其值 只要他们不害怕循环引用,您可以执行以下操作 function findX(obj) { var val = obj['x']; if (val !== undefined) { return val; } for (var name in obj) { var result = findX(obj[name]); if (result !==

如果我有这样一个javascript对象:
{a:{b:{c:{…}}}}
,我如何找到对象中是否有“x”键及其值

只要他们不害怕循环引用,您可以执行以下操作

function findX(obj) { 
  var val = obj['x'];
  if (val !== undefined) {
    return val;
  }
  for (var name in obj) {
    var result = findX(obj[name]);
    if (result !== undefined) {
      return result;
    }
  }
  return undefined;
}
注意:这将直接在此对象或其原型链中搜索属性“x”。如果您特别想将搜索限制在此对象上,可以执行以下操作

if (obj.hasOwnProperty('x')) {
  return obj['x'];
}
findX

function hasKey(obj,key){
    if(key in obj)
        return true;
    for(var i in obj)
        if(hasKey(obj[i],key))
            return true;
    return false;
}
例:


注意,这也将搜索原型链。如果这不是我想要的,那就给它打几个电话。@T.J.克劳德在这里搜索原型是我的意图,因为OP似乎只是想知道“x”是否存在于任何地方。我将更新我的答案,使之明确化,如果有多个
x
键,您想怎么做?例如,
{a:{x:1},b:{x:2}
alert(hasKey({a:{b:{c:{d:{e:{f:{g:{h:{i:{}}}}}}}}}},'i'));