2016-11-25 17 views
0

非常に複雑なデータ操作が必要です。DataTableでのデータ操作

マイデータソースは、私にそのように人によってグループ化されたキャッシュフローのリストを与える:

{ 
    "months": [ 
    "2016-10-01", 
    "2016-11-01", 
    "2016-12-01", 
    "2017-01-01" 
    ], 
    "persons": [ 
    { 
     "label": "John", 
     "cashflows": [ 
     { 
      "date": "2016-10-01", 
      "amount": "1000.00" 
     }, 
     { 
      "date": "2016-11-01", 
      "amount": "1000.00" 
     } 
     ] 
    }, 
    { 
     "label": "Brad", 
     "cashflows": [ 
     { 
      "date": "2017-01-01", 
      "amount": "5540.00" 
     } 
     ] 
    } 
    ] 
} 

私はDataTableのこれらのデータを入れたいが、私は数ヶ月「結合」する方法がわからないと、キャッシュフロー。

私の最高のゲストには、SQLのようなクエリですが、JavaScriptでは、この擬似コードを実行するために:

select each person 
    for each person 
    good_row = person.cashflows LEFT JOIN months ON cashflows.date (iiish..) 

を私はここjsfiddleを設定しています。

+0

はなぜ各行の合計キャッシュフローを示していけない、[OK]をクリックしますについての詳細を表示しますか? https://jsfiddle.net/apvfcvLz/ – Vanojx1

答えて

2

ここでは、これを行うためのプレーンなJavaScriptの方法です(難しい方法です)。 フィドルリンク:https://jsfiddle.net/ngwqfjo0/

function getDesiredData() { 
    var persons = real_data["persons"]; 
    var months = real_data["months"]; 

    persons.forEach(function(person) { 
    var row = []; 
    var amounts = []; 
    row.push(person["label"]); 

    months.forEach(function(month) { 
     var amount = ''; 
     for(x = 0; x < person["cashflows"].length; x++) { 
     if(month == person["cashflows"][x]["date"]) { 
      amount = person["cashflows"][x]["amount"]; 
      break; 
     } 
     } 
     amounts.push(amount); 
    }); 

    desiredData.push(row.concat(amounts)); 

    }); 

    return desiredData; 

} 

の人生を容易にするために、機能的なユーティリティを使用することを検討ようlodashまたはunderscore

function getDesiredDataEasy() { 
    var persons = real_data["persons"]; 
    var months = real_data["months"]; 
    var desiredData = []; 

    return _.map(persons, function(person) { 
    return _.concat([person["label"]], _.map(months, function(month) { 
     var cashFlowDate = _.find(person["cashflows"], function(cf) { 
     return cf.date == month; 
     }); 
     return cashFlowDate ? cashFlowDate.amount : ""; 
    })); 
    }); 
} 
+0

ニース!私はいくつかのloadshを学ぶつもりです、有望そうです – bixente57