如何在循环中填写JSON?

时间:2011-02-07 20:12:48

标签: javascript jquery json

我需要有类似的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);
});

courses变量是DOM对象,如下所示:

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

循环执行后,它的内容如下:

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

不是上面提到的结构......

为什么?

1 个答案:

答案 0 :(得分:3)

你的问题源于两件事:

  1. 您正在使用indexOf(),您应该检查索引是否为in对象

  2. 您的name正则表达式正在检查前缀,而prefix正则表达式正在测试您的姓名

  3. 因此,为了解决这个问题,您需要使用以下代码:

    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/