2010-09-06 6 views
0

Я пытаюсь назначить элементы массиву для действия пользователя, так, например, пользователь нажимает «Добавить», это добавит выбранный идентификатор в соответствующий раздел массива.Добавление элементов в массив javascript

Массив не будет создан в первом, так я создал пустой массив:

var Options={}; 

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

E.g. Когда пользователь нажимает плюс на запись, опция, выбранная из раскрывающегося списка, равна 2. Идентификатор выбранной записи 5. 5.

Я хотел бы структурировать свой массив следующим образом: -

[ключ, например, выпадающие вариант] => «записи» => массив [record_id]

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

[option 1] => 'publication_date' = 12/09/2010, 'records' => [1, 2, 4] 
[option 2] => 'publication_date' = 15/09/2010, 'records => [1, 3, 5] 

и т. Д., Каждый вариант из окна выбора имеет дату публикации и серию записей, которые пользователь может назначить ему.

+4

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

+0

Извините, значит объект. – 2010-09-06 14:54:11

+0

В любом случае, я просто сделаю способ хранения данных до отправки формы. – 2010-09-06 14:55:03

ответ

1

Вы можете сделать что-то вроде этого:

function AddItem(key, value) { 
    if(Options[key]) Options[key].push(value); 
    else Options[key] = [value]; 
} 

Например, делая это:

​AddItem(2, 5); 
AddItem(2, 6); 

привело бы к Options существа:

{ 2: [5, 6] } 

You can give it a try/play with it here.

+0

Используя технику объекта, могу ли я передать это скрипту php для обработки? – 2010-09-06 14:59:13

+0

Это, похоже, работает для добавления массива внутри ключа объекта, но что происходит, если в то же время, что и значение, я также хочу указать дату, которая является ключевой, то есть 2 конкретной. – 2010-09-06 15:03:43

+1

@ user275074 - Вы можете сериализовать его в массив json для публикации, например. JSON.stringify, [посмотрите здесь] (http://www.json.org/js.html) для этого. Я не следую второму комментарию, ключ должен быть свойством, он не может быть объектом даты ... однако это может быть строковое представление даты. –

0

Объект в javascript хорош, чтобы хранить один ключевой набор данных, а не различные ключи.

т.е. var records = {'12/09/2010':[1, 2, 4], '15/09/2010':[1, 3, 5]}

Чтобы получить записи для 15/09: records['15/09/2010']
Добавить новый рекорд по дате: records['15/09/2010'].push(6)

Если изменение даты, что вам нужно сделать что-то вроде:
records['17/09/2010'] = records['15/09/2010']; delete records['15/09/2010']

Пользователь не может изменять оба параметра одновременно (дата и добавить), и вы должны выполнять оба действия по обновлению отдельно.


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

var records = [ 
    {publication_date:'12/09/2010', records:[1, 2, 4], ..., otherProp='...'}, 
    ... 
]; 

И для каждого изменения, зацикливание на массив, найти соответствующий пункт и изменить его.

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