我从我的服务器获取JSON数组,如下所示:
[ {name: "Web Design", id: "27", month_n: "1", data: "68.00"},
{name: "Web Design", id: "27", month_n: "2", data: "56.00"} ,
{name: "Homework", id: "4", month_n: "2", data: "15.00"} ,
{name: "Gaming", id: "12", month_n: "2", data: "5.00"} ]
在客户端,我想重新排序,以便有类似的内容:
[{name: "Web Design", data:[68.00,56.00]}, {name:"Homework", data:[0,15]} and so on...
“数据”值按“id”编号和月份编号分组(默认为0,如果没有匹配的月份)。
最好的方法是什么?我尝试了纯粹的JavaScript方式,但是我很难过!我也听说过使用下划线JS更容易。但不知道从哪里开始。
有人请赐教我吗?答案 0 :(得分:1)
在vanilla JavaScript中执行此操作的一种方法是使用辅助对象,如以下代码所示。
在第一步中,我们会识别所有不同的name
值,并按照它们对所有data
字段进行分组。
在第二步中,将辅助对象转换回数组。
var arr = [ {name: "Web Design", id: "27", month_n: "1", data: "68.00"},
{name: "Web Design", id: "27", month_n: "2", data: "56.00"} ,
{name: "Homework", id: "4", month_n: "2", data: "15.00"} ,
{name: "Gaming", id: "12", month_n: "2", data: "5.00"} ];
// use a helper object to identify all distinct "names"
var helper = {};
for( var i=arr.length; i--; ) {
// init an array, if it is not there
helper[ arr[i]['name'] ] = helper[ arr[i]['name'] ] || [];
// add the newest element
helper[ arr[i]['name'] ].push( helper[ arr[i]['data'] ] );
}
// convert back to an array
var newArr = [];
for( var key in helper ) {
if( helper.hasOwnProperty( key ) ) {
newArr.push( { 'name': key, 'data': helper[key] } );
}
}
答案 1 :(得分:1)
这可以通过两个操作完成:
有一些纯JS数组原型扩展库可以实现这一目标以及许多其他操作。你可以看一下underscore.js。我还写了一个简单的JS库jsList。它附带了许多单元测试作为示例。
您只需要写下这些行:
var arr = [ {name: "Web Design", id: "27", month_n: "1", data: "68.00"},
{name: "Web Design", id: "27", month_n: "2", data: "56.00"} ,
{name: "Homework", id: "4", month_n: "2", data: "15.00"} ,
{name: "Gaming", id: "12", month_n: "2", data: "5.00"} ];
var temp = arr.groupBy(function(item){ return item.name });
var result = [];
for(var key in temp){
result.push({name: key, data: temp[key].pluck('data')});
}
您可以使用Object.keys来避免for循环,但它只附带Javascript 1.8.5或更高版本。
感谢。