2016-06-13 20 views
0

タイトルとして、私はグループ化されたオブジェクト内のオブジェクトの配列をプッシュする必要があります。私はここで例を発見し、それが行く:オブジェクトの配列内のグループ化されたオブジェクトの配列内の計算された合計でJavaScript

function groupBy(array, col, value) { 
    var r = [], o = {}; 
    array.forEach(function (a) { 
     if (!o[a[col]]) { 
      o[a[col]] = {}; 
      o[a[col]][col] = a[col]; 
      o[a[col]][value] = 0; 
      r.push(o[a[col]]); 

     } 
     o[a[col]][value] += +a[value]; 
    }); 
    return r; 
}; 

var data = [{ Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" }]; 

document.write('<pre>' + JSON.stringify(groupBy(data, 'Phase', 'Value'), 0, 4) + '</pre>'); 

私の結果は次のとおりです。

[ 
    { 
     "Phase": "Phase 1", 
     "Value": 50 
    }, 
    { 
     "Phase": "Phase 2", 
     "Value": 130 
    } 
] 

私は何を取得したいことは、私のグループ化されたオブジェクトの内部プロパティを持つオブジェクトの配列であるということである。それぞれのタスクと価値(私が価値を望む仕事)。

私はこの試みた:

function groupBy(array, col, col2, value) { 
    var r = [], o = {}; 
    array.forEach(function (a) { 
     if (!o[a[col]]) { 
      o[a[col]] = {}; 
      o[a[col]][col] = a[col]; 
      o[a[col]][col2] = a[col2]; 
      o[a[col]][value] = 0; 
      r.push(o[a[col]]); 

     } 
     o[a[col]][value] += +a[value]; 
    }); 
    return r; 
}; 

をし、 "タスク" パラメータを追加するだけで私が得たのだった。助けを

[ 
    { 
     "Phase": "Phase 1", 
     "Task" : "Task 1", 
     "Value": 50 
    }, 
    { 
     "Phase": "Phase 2", 
     "Task" : "Task 1", 
     "Value": 130 
    } 
] 

ありがとう!

答えて

1

ハッシュテーブルのキーにPhaseTaskを使用しています。だから、コードはこの

function groupBy(array, col, col2, value) { 
    var r = [], 
    o = {}; 
    array.forEach(function(a) { 
    // key is not 'Phase' only, it should combine 'Phase' and 'Task', others are the same. 
    if (!o[a[col] + a[col2]]) { 
     o[a[col] + a[col2]] = {}; 
     o[a[col] + a[col2]][col] = a[col]; 
     o[a[col] + a[col2]][col2] = a[col2]; 
     o[a[col] + a[col2]][value] = 0; 
     r.push(o[a[col] + a[col2]]); 

    } 
    o[a[col] + a[col2]][value] += +a[value]; 
    }); 
    return r; 
}; 

チェックアウトhereのように変更する必要があります。

+0

ありがとうございました!これで私は多くのことをクリア! :) –

関連する問題