2016-01-31 5 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, чтобы быть действительным ... но мне нужно для поиска объекта для ключа неизвестно пока runtime - может быть «key1» или «key2» или независимо от того, что пользователь указывает в качестве аргумента функции – BaltoStar

+0

, но поскольку моя структура json больше не является массивом, а вместо этого объектом со свойствами, как извлекать объект для ключевого неизвестного до времени выполнения? – BaltoStar

+0

ok, поэтому для структуры json kvp синтаксис выделения похож на доступ к элементу массива – BaltoStar

0

Это не действительный объект JavaScript. Если вы хотите, чтобы проверить наличие имущества на объекте, используйте:

Object.prototype.hasOwnProperty

0

Если свойство существует и имеет значение undefined ваше решение не будет работать. Проверьте это с typeof или hasOwnProperty вместо:

var obj = { 
    prop: undefined 
}; 

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

 Смежные вопросы

  • Нет связанных вопросов^_^