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

1

バニラJavaScriptでこれを行う1つの方法は、次のコードのようにヘルパーオブジェクトを使用することです。

name最初のステップでは、すべての個別の値を識別しdata、それらによってすべてのフィールドをグループ化します。2番目のステップでは、ヘルパーオブジェクトが配列に変換されます。

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 に答える