JSFiddle - React, Tailwind, and code Playground

by ArktekniK

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div id="tableDynamic"></div>

JavaScript

var ageBrackets = [
  [0, 10],
  [11, 20],
  [21, 30],
  [31, 40],
  [41, 50],
  [51, 60],
  [61, 70]
];

var maximumOccupancy = 50;

var ageTextBrackets = ageBrackets.map(function(bracket) {
  return bracket.join('-');
});

var genderTextBrackets = ['Man', 'Woman', 'Other', 'Not Set'];

function tableCreator(res, selector) {
  var table = $('<table class="table table-striped table-condensed"><thead><tr><td colspan="2">Item</td><td>Unit</td></tr><thead><tbody></tbody>');
  var tbody = table.find('tbody');

  function createMultiRow(key, values, unit) {
    var head = $(`<tr><td rowspan="${values.length}">${key}</td><td>${values[0]}</td><td>${unit}</td></tr>`);

    tbody.append(head);

    values.slice(1).forEach(function(bracket) {
      $(`<tr><td>${bracket}</td><td>${unit}</td></tr>`).appendTo(tbody);
    });
  }

  createMultiRow('Man', ageTextBrackets, 'Person');
  createMultiRow('Woman', ageTextBrackets, 'Person');
  table.append(`<tr class="total"><td colspan="2">Sum</td><td>Person</td></tr>`)
  table.append(`<tr class="max"><td colspan="2">Maximum</td><td>${maximumOccupancy}</td></tr>`)
  table.append(`<tr class="occupancy"><td colspan="2">Occupancy</td><td>Percentage</td></tr>`)
 
  var f = 0;
  // Loops through each summary
  res.forEach(function (column) {
      // Find all the last column cells
  		var finalCol = $(table).find('tr td:last-child').toArray();
      // Put the date next to the first one
      var first = finalCol.shift();
			$(first).after(`<td>${column.date.split('T')[0]}</td>`);
      
      // Add empty cells...should put the appropriate data in. 
      // Think this should have been called with a selector that matches Male:0-10 etc.
			finalCol.forEach(function(rowCell){
        $(rowCell).after(`<td>${f++}</td>`);
      });
    });
		table.find('tr:first').css('font-weight', 'bold');
    $(selector).append(table);
  }

  var dataSet = [{
    "date": "2017-02-21T00:00:00Z",
    "numUsers": 1,
    "numSessions": 1,
    "avgDuration":...