2016-08-28 2 views
0

Я строю массив как объект, который функция, которую я пишу, в конечном итоге сканирует. Это статические данные, поэтому, когда он заполняется, ничего не может быть добавлено или удалено, но у меня возникают трудности с его форматированием.Построение объекта в javascript возвращает ошибку

Переменная декларация отлично работает, если у меня есть только стоит одна запись в данных:

var panel = { 
    'url':'http://www.minorworksoflydgate.net/Testament/Clopton/nw_test_1.html', 
    'x':[1.63, 3.53], 
    'y':[6.58, 7.26], 
    'z':[2.05, 2.81] 
    } 

Однако, если я пытаюсь добавить ценность второй записи в информации:

var panel = {'0':['url':'http://www.minorworksoflydgate.net/Testament/Clopton/sw_test_1.html',   
     'x':[-9.38, -7.47], 
     'y':[6.80, 7.49], 
     'z':[-8.18, -8.85]],'1':[ 
     'url':'http://www.minorworksoflydgate.net/Testament/Clopton/nw_test_1.html', 
     'x':[1.63, 3.53], 
     'y':[6.58, 7.26], 
     'z':[2.05, 2.81]} 
     } 

Я получаю следующая ошибка: SyntaxError: Unexpected token ':'. Expected either a closing ']' or a ',' following an array element. Я пробовал каждую комбинацию, о которой я могу думать: обертывание каждого куска данных в фигурные скобки или квадратные скобки и оба явно объявляющие ключи и не объявляющие ключи. Все это приводит к вариациям этой ошибки. Где я буду разбираться в форматировании этой информации?

ответ

1

Ваше сочетание объектов литералов и массивов странным способом. Вот, вероятно, вы ищете

[ 
    { 
    '0':.... 
    }, 
    { 
    '1':... 
    } 
] 

Это массив объектов, где объекты могут быть вашими записями данных.

Что я вижу в коде, который является проблема

[ '0': '.....'] //illegal 

Квадратные скобки представляют собой массивы, которая представляет собой список данных, являются ли они строки, числа или объекты.

[ '0', {}, 'blah', 1.2] //legal 

Curly brace - это объект буквального или ассоциативного массивов.

{ '0': '...' } 

РЕДАКЦИЕЙ

Люди говорят, что массивы объектов литералы, потому что они ведут себя как один во время выполнения. Вы определяете массивные и объектные литералы, поэтому существуют определенные правила, которые вступают в игру. В вашем коде, если вы вместо этого напишите

var panel = []; 
var index1 = [] 
panel['0'] = index1 
index1['url'] = 'http://'; 
index1['x'] = 1.2; 
var index2 = []; 
index2['url'] = 'http://'; 

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

Если вы хотите получить дополнительную информацию, выполните поиск формата данных JSON.

+0

Спасибо, что высказались. Поэтому, когда люди говорят, что ассоциативный массив в Javascript становится объектом, и что все массивы в Javascript являются объектными литералами, что именно они означают? Я изначально делал все в квадратных скобках, но это явно не работало из-за ассоциативных элементов ('x': [- 9.38, -7.47] и т. Д.). Похоже, что моя проблема связана с неправильным формированием массива, но я хотел бы лучше понять, какие отличия для будущей справки. – medievalmatt

+0

Добавлена ​​дополнительная информация для вас. –

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