Skip to content

Instantly share code, notes, and snippets.

@anabelle2001
Created March 30, 2017 16:21
Show Gist options
  • Save anabelle2001/ecda75080e5086bf9ea75c1051c3b37e to your computer and use it in GitHub Desktop.
Save anabelle2001/ecda75080e5086bf9ea75c1051c3b37e to your computer and use it in GitHub Desktop.
//tableout.js -- Beau Vandenburgh
//converts an array of objects or a 2d array into a fancy spaced out table
//MIT liscence
function tableout (data,padding_val){
if(+padding_val==NaN){
console.info("The padding value (args[1]) is not a number, so it will default to 2. here's the trace:")
console.trace()
padding_val=2;
}
var resultstr="";
if (!Array.isArray(data[0])) {//convert object to 2d array
var newdata=[];
var keys=[];
for (var key in data[0]) {
if (data[0].hasOwnProperty(key)) {
keys.push(key);
}
}
newdata[0]=keys;
for (var i = 0; i < data.length; i++) {
newdata[i+1]=[];
for (var j = 0; j < keys.length; j++) {
newdata[i+1][j]=data[i][keys[j]];
}
}
data = newdata;
}
for (var i = 0; i < data.length; i++) {//convert each value to string
for (var j = 0; j < data[i].length; j++) {
data[i][j]=""+data[i][j];
}
}
var collumns = [];
for(var i = 0; i < data[0].length;i++){//collums coutns how many chars something is
collumns[i] = 0;
}
for (var row = 0; row < data.length; row++) {//find the length of each collumn
for (var cell = 0; cell < data[row].length; cell++) {
if (data[row][cell].length+padding_val > collumns[cell]){
collumns[cell]=data[row][cell].length+padding_val;
}
}
}
for (var cell = 0; cell < data[0].length; cell++) {
resultstr+=data[0][cell];
for (var j = 0; j < (collumns[cell]-data[0][cell].length); j++) {
resultstr+=" ";
}
}
for (var i = 1; i < data.length; i++) {//make the string
resultstr+="\n";
for (var cell = 0; cell < data[i].length; cell++) {
resultstr+=data[i][cell];
for (var j = 0; j < (collumns[cell]-data[i][cell].length); j++) {
resultstr+=" ";
}
}
}
return resultstr;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment