Как заполнить JSON в цикле? - PullRequest
1 голос
/ 07 февраля 2011

Мне нужна похожая структура JSON:

{
    "group1": ["A", "B", "C"],
    "group2": ["C", "D", "E"],
    "group3": ["F", "G", "H"]
}

и нужно создать его в цикле:

courses.each(function(index) {
    name = $(this).attr("href").replace(/([^\/]*)\/.*/, "$1");
    prefix = $(this).attr("href").replace(/[^\/]*\/(.*)/, "$1");

    if (subjects.indexOf(prefix) == -1) {
        subjects[prefix] = new Array();
    }

    subjects[prefix].push(name);
});

Переменная курсы - это объект DOM из следующей строки:

<a href="group1/A">...
<a href="group1/B">...
<a href="group2/D">...

После выполнения цикла оно выглядит так:

[Array[0], "group1", "group2"]

не упомянутая выше структура ...

Почему?

1 Ответ

3 голосов
/ 07 февраля 2011

Ваша проблема проистекает из двух вещей:

  1. Вы используете indexOf(), где вы должны проверять, равен ли индекс in объекту

  2. Ваше регулярное выражение name проверяет префикс, а регулярное выражение prefix проверяет ваше имя

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

courses.each(function(index) {
    var prefix = $(this).attr("href").replace(/([^\/]*)\/.*/, "$1"),
        name = $(this).attr("href").replace(/[^\/]*\/(.*)/, "$1");

    if (!(prefix in subjects)) { //here test using the "in" operator
        subjects[prefix] = []; //shorthand array notation
    }

    subjects[prefix].push(name);
});

Рабочий пример можно посмотреть здесь:

http://jsfiddle.net/ErUvC/1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...