我需要有类似的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"]
不是上面提到的结构......
为什么?
答案 0 :(得分:3)
你的问题源于两件事:
您正在使用indexOf()
,您应该检查索引是否为in
对象
您的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);
});
你可以在这里看到一个有效的例子: