如何检查JavaScript对象中是否有嵌套密钥

时间:2016-10-26 18:01:37

标签: javascript

我有以下JavaScript对象。

如果myobject包含以下内容,我该如何检查特定密钥是否可用?

{
    "AccountNbr": "1234567890123445",
    "AccountName": "Test Bob",
    "Address": {
        "addressId": 1234,
        "line1": "Sample Line 1",
        "line2": "Sample Line 2",
        "city": "Sample City",
        "state": "State"
    }
}

例如,检查密钥"AccountNbr"是否可用。我使用了以下语句,它返回true。

"AccountNbr" in myobject 

并返回true。如果我必须检查密钥"addressId"是否可用,我使用了以下语句并返回false,尽管该密钥可用。

"Address.addressId" in myobject 

上述语句始终返回false,但addressId可用。还有其他方法可以检查addressId是否可用吗?

我也试过给myobject.Address.addressId并且它总是返回false,尽管密钥可用。

2 个答案:

答案 0 :(得分:1)

你想要的是:

if('addressId' in myobject.Address){

}

更好的可能是:

if('Address' in myObject && 'addressId' in myObject.Address){

}

这是在使用中的语法,它基本上检查某个键是否在单词in之后引用的对象中的一个键之中。

所以你问if 'aPotentialKey' is one of the Object.keys(myObject)

Object.keys(anObject)将返回一个对象中的键数组,如果你想我猜你可以通过它们进行for循环并检查它是否相等。但是很高兴知道。

答案 1 :(得分:0)

这是一种通用的方法:



// function for checking whether an object contains a series of properties
function hasMember(object, propertyPath) {
  var result = propertyPath.split('.').reduce(function(last, next) {
    return {
      value: last.value && last.value[next],
      hasProperty: last.value && next in last.value
    };
  }, {
    value: object,
    hasProperty: true
  });
  
  return result.hasProperty;
}

// example scenario
var o = {
  "AccountNbr": "1234567890123445",
  "AccountName": "Test Bob",
  "Address": {
    "addressId": 1234,
    "line1": "Sample Line 1",
    "line2": "Sample Line 2",
    "city": "Sample City",
    "state": "State"
  }
};

console.log(hasMember(o, 'AccountNbr'));        // true
console.log(hasMember(o, 'Address.addressId')); // true
console.log(hasMember(o, 'Address.line3'));     // false