Многомерный объект jQuery с многомерными массивами

Я пытаюсь построить несколько продвинутый график подключения Flot jQuery. Для этого мне нужен многомерный объект (по крайней мере, я так думаю).

Структура должна выглядеть так:

var datasets = {
        "usa": {
            label: "USA",
            data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
        },        
        "russia": {
            label: "Russia",
            data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]]
        }
};

Из моего кода программной части я создал несколько списков, выглядящих так (не те же данные, но не обращайте на это внимания):

<ul id="MOBILISATION">
  <li data-key="2012/3/27">02:10</li>
  <li data-key="2012/3/28">05:25</li>
  <li data-key="2012/3/29">09:21</li>
  <li data-key="2012/3/30">00:00</li>
  <li data-key="2012/3/31">00:00</li>
</ul>
<ul id="OPERATIONS">
  <li data-key="2012/3/27">19:51</li>
  <li data-key="2012/3/28">18:35</li>
  <li data-key="2012/3/29">14:39</li>
  <li data-key="2012/3/30">07:46</li>
  <li data-key="2012/3/31">10:26</li>
</ul>

Где США/США — МОБИЛИЗАЦИЯ, 1988 — 2012/3/27, а 483994 — 02:10. Вы получаете картину !!??

Я пытался написать jQuery, но он явно не работает:

    var objects = [];
    var array = [];
    var categoryName = "";
    $('div#Container ul').each(function () {
        catName = $(this).attr('id');
        $('li', this).each(function () {
            array.push([new Date($(this).data('key')).getTime(), $(this).text()]);
        });

        objects.push({ categoryName: { label: categoryName, data: array} });
    });
    var datasets = objects;

Как видите, я использовал push в массив objects. Ясно, что это не дает мне желаемого результата. Я немного теряюсь в этом, так как впервые работаю с объектами jQuery.

Какое лучшее решение для этого?


person Kasper Skov    schedule 25.07.2012    source источник


Ответы (4)


Ваши наборы данных — это объект, а не массив — вы не можете нажать на него. Кроме того, ваша переменная categoryName так не работает (подробнее читайте в обозначении с точками и квадратными скобками< /а>). Попробуй это:

var datasets = {};
$('div#Container ul').each(function () {
    catName = this.id;
    var array = [];
    $('li', this).each(function () {
        array.push([
          new Date($(this).data('key')).getTime(),
          $(this).text()
        ]);
    });
    datasets[catName.toLowercase()] = {
        label: catName.toUppercase(),
        data: array
    };
});

Кроме того, я не уверен, действительно ли вам нужно создавать объекты Date, но это зависит от вашего формата ввода и вывода.

person Bergi    schedule 25.07.2012
comment
Мне нужен объект даты, потому что у меня есть режим свойства оси x во времени (должен работать плагин Flot). С готовым кодом контейнер графа и категории отображаются красиво. Моя следующая проблема — объект Date. На графике нет данных/столбиков/линий, потому что плагин не может распознать строку чч:мм по оси Y как время. Дайте мне секунду, чтобы понять это, и я отмечу ваш ответ как правильный (хотя все остальные ответы, вероятно, также верны, просто прочитав их). Спасибо - person Kasper Skov; 25.07.2012
comment
Хм, да, не могу заставить его работать. У вас есть идеи, что делать? Я попытался преобразовать его в объект Date и установить свойство формата даты для оси Y плагинов. Неудачно - person Kasper Skov; 25.07.2012
comment
Нет, не я. Но я думаю, что это было бы хорошо, уже есть некоторые проблемы со временем - но они обрабатывают дату и время, а не время суток :-) - person Bergi; 25.07.2012
comment
Ага. Угадайте, что мне нужно, это промежуток времени. Спасибо за помощь! - person Kasper Skov; 25.07.2012

Измените var objects = []; на var objects = {}; и измените

objects.push({ categoryName: { label: categoryName, data: array} });

to

objects[categoryName] = { label: categoryName, data: array};

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

person Joe Green    schedule 25.07.2012

Пытаться

    var data = {};
    $('div#Container ul').each(function() {
        var sub_obj = data[$(this).attr('id').toLowerCase()] = {
            label: $(this).attr('id').toUpperCase(),
            data: []
        };
        $(this).children('li').each(function() {
            sub_obj.data.push([$(this).data('key'), $(this).text()]);
        });
    });
    console.log(data);
person Mitya    schedule 25.07.2012
comment
В этом посте отсутствует объяснение. - person mickmackusa; 16.10.2019

person    schedule
comment
В этом посте отсутствует объяснение. - person mickmackusa; 16.10.2019