2015-04-28 4 views
2

Мой массив:Не удается получить доступ к элементам в массиве яваскрипта

{ 
"data":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQ…ACCCCAAAIIIICAvwIEIP760zoCCCCAAAIIIIAAAoES+P992sgQ2E6rdwAAAABJRU5ErkJggg==", 
"name":"splash.png", 
"imageOriginalWidth":1024, 
"imageOriginalHeight":768, 
"imageWidth":1969, 
"imageHeight":1477, 
"width":800, 
"height":600, 
"left":-585, 
"top":-406 
} 

и у меня есть две переменные:

$image_data = $array['data']; 
$image_name = $array['name']; 

Оба этих переменных возвращают undefined

Я пропускаю что-то очевидное ?

+2

Не массивы javaScript, созданные с помощью 'var foo = [" bar ", 9, false]'? – leDominatre

+2

Это не массив, это литерал объекта. – ocodo

+0

Uh huh, кроме объекта literal имеет 'var foo = {...}' – leDominatre

ответ

1

Во-первых, важно отметить, что это не массив, это определение объекта.

Массив может быть определен как:

[ 
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQ…ACCCCAAAIIIICAvwIEIP760zoCCCCAAAIIIIAAAoES+P992sgQ2E6rdwAAAABJRU5ErkJggg==", 
"splash.png", 
1024, 
768, 
1969, 
1477, 
800, 
600, 
-585, 
-406 
] 

Что это не ключи, как "data": (которые также могут быть выражены в виде data:) Кажется, вы определенно хотите, чтобы получить доступ к значениям по ключу, так, что вы действительно хотите:

var data, name, myObject; 

// NOTE: We do not "quote" object keys under normal circumstances. 
myObject = { 
    data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQ…ACCCCAAAIIIICAvwIEIP760zoCCCCAAAIIIIAAAoES+P992sgQ2E6rdwAAAABJRU5ErkJggg==", 
    name:"splash.png", 
    imageOriginalWidth:1024, 
    imageOriginalHeight:768, 
    imageWidth:1969, 
    imageHeight:1477, 
    width:800, 
    height:600, 
    left:-585, 
    top:-406 
} 

data = myObject["data"]; // We don't usuaully use this 
name = myObject["name"]; // style, although it works. 
         // 
         // It's generally reserved for 
         // dynamic access. 
         // 
         // i.e. we make a string to match the keyname. 

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

data = myObject.data; 
name = myObject.name; 

Я надеюсь, что это немного облегчило для вас.

На боковой ноте НЕ используйте имена, такие как $array. Во-первых, не используйте префикс $ для обычных переменных, это не PHP или BASIC.

Во-вторых, когда у вас есть объект, вы хотите, чтобы его называли чем-то полезным/значимым/запоминающимся. (Именование вещей сложно!)

Когда вы назовете вещи должным образом, другие люди могут читать и понимать ваш код, а после тяжелого уик-энда в городе вы тоже можете.

+0

Благодаря @Slomojo это очень помогло, как вы, возможно, догадались, что я все еще участвую. Я пошел с UnderscoreJS, но он по-прежнему возвращается неопределенным. – RipzCurlz

+0

myObject [data] в вашем примере = myObject [undefined]. Вы не определили значение для данных. Правильный подход состоял бы в том, чтобы либо инициализировать переменную данных, либо использовать кавычки myObject ["data"] или myObject.data для доступа к этому свойству myObject. Кроме этого, хороший ответ и информация для оригинального вопросника. –

+0

'myObject [data]' должен быть 'myObject.data'. Тем не менее, я не понимаю, что вы делаете, значительно отличающееся от того, что делает OP уже. –

-3

Вы пытались объявить массив, а также переменные, которые хотите сохранить в хранилище из массива, используя ключевое слово var?

например:

var myArray = ["hello",["world"]; 

Глядя на ваш код у меня сложилось впечатление, что вы пытаетесь сделать пользовательский объект.

+1

. Определение вашего массива не является синтаксически правильным. – ocodo

+0

Кроме того, мы должны стремиться использовать правильный язык при обращении к объектным структурам, подобным тому, который показан в вопросе, который упоминается как литерал объекта. –

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