2010-08-03 3 views
3

Я не понимаю, почему это не работает:Ассоциативные массивы/Object - получение значения с помощью точечной нотации

thing = { 
img78:{ exifmanufacturer:"Canon", exifmodel:"Canon EOS 450D", exifexposuretime:"1/125", exiffstop:"71/10", exifiso:"200"}, 
img79:{ exifmanufacturer:"Canon", exifmodel:"Canon EOS 550D", exifexposuretime:"1/125", exiffstop:"71/10", exifiso:"100"}, 
img80:{ exifmanufacturer:"Canon", exifmodel:"Canon EOS 550D", exifexposuretime:"1/30", exiffstop:"16/1", exifiso:"250"}, 
img81:{ exifmanufacturer:"NIKON CORPORATION", exifmodel:"NIKON D700", exifexposuretime:"10/600", exiffstop:"71/10", exifiso:"800"}, 
img82:{ exifmanufacturer:"NIKON CORPORATION", exifmodel:"NIKON D700", exifexposuretime:"10/2500", exiffstop:"90/10", exifiso:"800"}, 
img83:{ exifmanufacturer:"NIKON CORPORATION", exifmodel:"NIKON D700", exifexposuretime:"10/600", exiffstop:"71/10", exifiso:"800"}, 
img77:{ exifmanufacturer:"Canon", exifmodel:"Canon EOS 450D", exifexposuretime:"1/160", exiffstop:"8/1", exifiso:"100"}, 
img69:{ exifmanufacturer:"NIKON CORPORATION", exifmodel:"NIKON D700", exifexposuretime:"10/600", exiffstop:"71/10", exifiso:"800"} 
}; 

var imageid = 'img80'; 

console.log('myVar1: ', thing.img80.exifmodel); 
console.log('myVar2: ', thing.imageid.exifmodel); 

Выходы:

myVar1: Canon EOS 550D 
thing.imageid is undefined 

я бы подумал, что это будет в объезд.

ответ

6

Вы должны получить доступ к нему немного по-другому, используя [] обозначения, например:

console.log('myVar2: ', thing[imageid].exifmodel); 

В JavaScript это эквивалентно:

obj.Property 
obj["Property"] 

Или, как в вашем случае:

var prop = "Property"; 
obj[prop]; 
+0

Возможно, период между '[imageid] .exifmodel'? –

+0

@quixoto - Woops, хороший улов, спасибо и обновлено :) –

+0

ah ... 'thing [imageid] .exifmodel' Я пытался использовать все виды комбо с квадратными скобками и точками, но не с этим. Благодаря! – xgarb

0

Во втором примере это будет похоже на запись thing.img80'.exifmodel, которая является незаконной. Если вы хотите использовать строку для доступа к полю объекта, вам нужно будет сделать вещь [imageid] .exifmodel.

0

Если у вас есть индекс в строке, как это, вы должны использовать кронштейн обозначения для доступа к значению:

var imageid = 'img80'; 
console.log('myVar2: ', thing[imageid].exifmodel); 

Или вы всегда можете взять Eval (или зло, в зависимости от того, насколько плохо вы рассмотрите эту практику):

eval("console.log('myVar2: '), thing." + imageid + ".exifmodel)"); 
Смежные вопросы