我正在寻找group by来执行第二级JSON字符串。例如,我使用下面的代码来使用group by它可以很好地工作,其中JSON字符串中有1级数组。
Array.prototype.groupBy = function(keyName) {
var res = {};
this.forEach(function(x) {
var k = x[keyName];
var v = res[k];
if (!v) v = res[k] = [];
v.push(x);
});
return res;
};
var myObject = {
"groups": [{
"id": "2",
"name": "test group 1",
"category": "clinical note",
"author": "RRP"
}, {
"id": "1",
"name": "test group 2",
"category": "clinical image",
"author": "LKP"
}, {
"id": "2",
"name": "test group 1",
"category": "clinical document",
"author": "RRP"
}, {
"id": "4",
"name": "test group 4",
"category": "clinical note",
"author": "John"
}]
}
myObject.groups.sort(function(a,b) { return a.author > b.author } );
var byJob = myObject.groups.groupBy('id');
for (var author in byJob) {
document.write('<h3>'+author+','+byJob[author].length+'</h3>');
byJob[author].forEach(function(e) {
document.write('<p>'+e.id +', '+e.name+'</p>');
});
输出:
1,1
1, test group 2
2,2
2, test group 1
2, test group 1
4,1
4, test group 4
现在上面的示例工作得非常好,但我正在寻找JSON字符串中的二级数组分组。举例来说,如果我有以下JSON字符串::
{
"Category": {
"old_modi":1,
"new_modi":1,
"FORM": [{
"name":"form1",
"date":"08/08/2012",
"location":"abc",
"PERSON":[{
"ID":1,
"author":"xyz"
}]
}]
}
}
期望输出(作者姓名将按表格名称,日期和地点分组)::
xyz
form1 08/08/2012 xyz
任何人都知道我在顶部发布的工作副本中哪一部分需要更改?
提前致谢..
答案 0 :(得分:0)
您可以递归地遍历javascript对象。一个棘手的问题是javascript对象可以是json对象或数组。在我的示例解决方案中,我为每个解决方案定义了两个不同的for循环,可能有一种简单的方法可以做到这一点。无论如何,我的解决方案适用于任何级别的groupby。这是jsFiddle