2016-01-31 26 views
0

對於JSON結構,像這樣:JS如何確定JSON KVP結構中是否存在關鍵字?

descriptors = {"key1" : { "propertyA": "propertyA-value1", 
           "propertyB": "propertyB-value1" }, 
       "key2" : { "propertyA": "propertyA-value2", 
           "propertyB": "propertyB-value2" }} 

如何確定給定鍵是否存在?

# argKey is function arg supplied by caller 
descriptor = descriptors[argKey] 

if descriptor != undefined 
    # do something with descriptor 

是嗎?

回答

1

您的代碼是無效的 - 你有[ ]支架,其界定一個數組,但你似乎是試圖把一個對象內。你需要這個。

descriptors = {"key1" : { "propertyA": "propertyA-value1", 
           "propertyB": "propertyB-value1" }, 
       "key2" : { "propertyA": "propertyA-value2", 
           "propertyB": "propertyB-value2" }}; 

除此之外,要測試是否存在屬性,您可以使用in運算符。

'key1' in descriptors; 
>> true 

由於測試鍵只是一個字符串,如果它未提前知道,您可以將它存儲在一個變量中。

var keyName = 'key1'; 
if (keyName in descriptors) { 
    // do something 
} 

根據您的問題的意見,訪問屬性的值,你可以說

descriptors[keyName]; 

// More deeply nested example 
var keyName = 'key1'; 
var propName = 'propertyA'; 
console.log(descriptors[keyName][propName]); 
+0

編輯JSON是有效的...但我需要查找的對象的關鍵未知直到運行時 - 可以是「key1」或「key2」或任何用戶指定爲功能 – BaltoStar

+0

arg感謝,但由於我的json結構不再是一個數組,而是一個對象的屬性如何提取對象的關鍵未知直到運行時? – BaltoStar

+0

ok對於json kvp結構,提取語法類似於數組元素的訪問 – BaltoStar

0

如果此屬性存在並具有undefined您的解決方案價值將無法正常工作。與typeofhasOwnProperty代替一下:

var obj = { 
    prop: undefined 
}; 

console.log(obj.prop === undefined); // true 
console.log(typeof obj.prop === undefined); // false 
console.log(!obj.hasOwnProperty("prop")); // false 
相關問題