2016-11-25 6 views
0

У меня довольно сложная обработка данных для выполнения.Обработка данных в DataTables

Моя DataSource дает мне список денежных потоков, сгруппированных по лицу так:

{ 
    "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, но я не знаю, как «JOIN» месяцы и денежные потоки.

Мой лучший гость является 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 для этого (трудный путь). Fiddle ссылка: 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

Смежные вопросы