我有以下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,尽管密钥可用。
答案 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