2016-11-25 69 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