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;
...