2016-11-25 66 views
0

我有一個相當複雜的數據操作來執行。數據表中的數據操作

我的數據源給我的現金流的名單,被人這樣的分組:

{ 
    "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

的功能效用爲什麼不顯示在每行的總現金流,然後顯示在點擊詳細信息? 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; 

} 

爲了使生活更輕鬆,可以考慮使用像lodashunderscore

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

不錯!我將要學習一些加載,看起來很有希望 – bixente57