Ассоциативные массивы / Объект - получение значений с точечной нотацией - PullRequest
3 голосов
/ 03 августа 2010

Я не понимаю, почему это не работает:

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

Я бы подумал, что будет наоборот.

Ответы [ 3 ]

7 голосов
/ 03 августа 2010

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

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

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

obj.Property
obj["Property"]

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

var prop = "Property";
obj[prop];
0 голосов
/ 03 августа 2010

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

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

Или вы всегда можете выбрать маршрут eval (или зло, в зависимости от того, как плохо вы считаете эту практику):

eval("console.log('myVar2: '), thing." + imageid + ".exifmodel)");
0 голосов
/ 03 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...