0

我从我的服务器获取了一个 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 更容易。但不知道从哪里开始。

有人请赐教吗?

4

2 回答 2

2

这可以通过两个操作来完成:

  1. Groupby [ name ] 字段,然后
  2. 采摘 [数据] 字段

有纯 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 或更高版本。

谢谢。

于 2013-05-19T23:50:00.260 回答
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] } );
 }
}
于 2013-02-06T13:23:34.070 回答