JSFiddle - React, Tailwind, and code Playground

by Felipe Alfaro

HTML

<code id="console">
  
</code>

JavaScript

var body_1 = [
  {user_name: 'Louis', user_age: '16'},
  {user_name: 'Danne', user_age: '21', user_hobbie: 'Pokemon Go'},
  {user_name: 'Jasmine', user_age: '24', user_loves: 'Cats'},


],
    body_2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'];







console.clear();
console.log(

  save(

    body_1, ['user_hobbie']


  )

);











function save(bodyArr, headArr, footArr) {

  var tHead = null,
      tBody = null,
      tFoot = footArr,
      headFormatter = null,
      rowObjSample = null;

  if (headArr instanceof Array)
    tHead = headArr;

  else if (typeof headArr === 'function')
    headFormatter = headArr;

  if (bodyArr.length > 0) {

    rowObjSample = bodyArr[0];

    if (rowObjSample instanceof Array)
      tBody = bodyArr;

    else if (typeof rowObjSample === 'object') {
      if (!tHead)
        tHead = generateHeads(bodyArr);

      tBody = generateBody(bodyArr, tHead);
    }
    else
      tBody = formatBody(bodyArr, headArr);


    if (headFormatter)
      tHead = tHead.map(headFormatter);

  }

  return {
    tHead: tHead,
    tBody: tBody,
    tFoot: tFoot
  }


}

function generateHeads(bodyArr) {
  var generatedHeads = [];
  Array.prototype.forEach.call(bodyArr, function (obj) {
    Object.keys(obj).forEach(function (key) {
      if (generatedHeads.indexOf(key) === -1)
        generatedHeads.push(key);
    });
  });
  return generatedHeads;
}

function generateBody(bodyArr, headArr) {
  var generatedBody = [];
  Array.prototype.forEach.call(bodyArr, function (rowObj) {
    var rowData = [];
    Array.prototype.forEach.call(headArr, function (headName) {
      rowData.push(rowObj[headName] || '');
    });
    generatedBody.push(rowData);
  });
  return generatedBody;
}

function formatBody(bodyArr, headArr) {
  var formattedBody = [],
      headsCount = 0,
      rowCount = -1;

  if (Array.isArray(headArr))
    headsCount = headArr.length;

  else if (!isNaN(headArr))
    headsCount = headArr;

 ...