2011-02-07 54 views
1

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

課程變量是DOM對象從某事像這樣:

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

循環執行後,它的內容如下:

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

不是上面提到的結構...

爲什麼?

+0

我不完全相信你的問題是什麼? – 2011-02-07 20:18:27

回答

3

您的問題,從兩件事情源於:

  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/