#javascript #jquery #arrays #multidimensional-array
#javascript #jquery #массивы #многомерный массив
Вопрос:
У меня небольшая проблема с JavaScript.
Мне нужно получить дату ширины массива в виде ключей и событий в качестве значений.
В PHP я бы сделал что-то вроде этого :
$var = new array();
Loop
$var[$date][] = $event;
End loop
Вы понимаете, что я имею в виду?
Спасибо, с уважением
Комментарии:
1. Нет, я действительно не понимаю, что вы имеете в виду. Но я предположил и опубликовал ответ. Если это не отвечает на ваш вопрос, пожалуйста, прокомментируйте, объяснив вашу проблему подробнее.
Ответ №1:
В javascript вы можете создать подобную структуру данных следующим образом:
var events = {
'2009-09-09': [],
'2010-10-10': [],
'2011-11-11': []
};
Это events = { ... }
литерал объекта в javascript. Объекты в javscript действуют очень похоже на хэши со свойствами в качестве ключей, так что по сути это будет действовать как хэш, привязанный к датам. Каждая дата инициализируется пустым массивом.
И вы можете заполнить его такими событиями, как это
events[date].push(event);
Если вы не знаете даты заранее, вы можете динамически заполнить хэш. Итак, вы бы начали с пустого хэша:
var events = {};
Затем вы будете проверять наличие ключа даты каждый раз, когда будете добавлять событие, например:
if (!(date in events)) events[date] = [];
events[date].push(event);
date in events
Проверяет, существует ли ключ, и !
отрицает его. Поэтому, если ключ даты не существует, он инициализирует ключ даты пустым массивом. Затем он отправляет событие на эту дату как обычно.
Комментарии:
1. Спасибо за ваш ответ. Чтобы объяснить мне лучше: я извлекаю в цикле даты, которые находятся в объекте. Я хочу заполнить все даты несколькими событиями, и я не знаю, как я могу добавить элемент в массив без указания какого-либо ключа, как в PHP $events[$date][] = $event;
2. @бен хех, я понял… но часть меня задавалась вопросом, полностью ли я пропустил суть вопроса! Один из таких дней 🙂
3. @PierreLechelle, я обновил свой ответ, чтобы отразить это. Это работает для вас?
4. @PierreLechelle, я думаю, что наконец-то понял, чего вы хотите, и переписал свой ответ еще раз. Дайте мне знать, если это то, что вы искали.
5. Ben ! Ты потрясающий ! Спасибо за ваше время и ваши многочисленные изменения! У меня успех! Еще раз спасибо!
Ответ №2:
В Javascript сопоставления ключ-значение обрабатываются Object
s . Пустой объект — это просто {}
. Вы можете делать такие вещи, как (обратите внимание, что var — это зарезервированное слово в Javascript, поэтому я не могу точно скопировать ваш пример):
var variable = {};
var date_list = [1,2,3];
var event_list = [4,5,6];
for (i in date_list){
var key = date_list[i];
var value = event_list[i];
variable[key] = value;
}
// variable now contains: {1:4, 2:5, 3:6}
console.log(variable[1]);
// prints 4
РЕДАКТИРОВАТЬ: это основной синтаксис. Если вы хотите иметь массив для каждого ключа, просто сделайте что-то подобное, но с массивами вместо чисел в event_list . Например:
my_dates = {'2011': [1,2,3], '2010': [6,7,8]}
Ответ №3:
Чтобы добавить элемент в список, вы можете использовать push
javascript-метод объектов массива…
events_by_date = {};
...
for (var i=0; i<events.length; i ) {
if (!events_by_date[events[i].date]) {
// This is the first event on this date
// so create the list
events_by_date[events[i].date] = [];
}
// Add the event to the list of events in that date
events_by_date[events[i].date].push(events[i]);
}