Showing posts with label Javascript. Show all posts
Showing posts with label Javascript. Show all posts

Monday, September 13, 2010

JavaScript print_r() or var_dump() Equivalent

SkyHi @ Monday, September 13, 2010
/**
 * Concatenates the values of a variable into an easily readable string
 * by Matt Hackett [scriptnode.com]
 * @param {Object} x The variable to debug
 * @param {Number} max The maximum number of recursions allowed (keep low, around 5 for HTML elements to prevent errors) [default: 10]
 * @param {String} sep The separator to use between [default: a single space ' ']
 * @param {Number} l The current level deep (amount of recursion). Do not use this parameter: it's for the function's own use
 */
function print_jc(x, max, sep, l) {

 l = l || 0;
 max = max || 10;
 sep = sep || ' ';

 if (l > max) {
  return "[WARNING: Too much recursion]\n";
 }

 var
  i,
  r = '',
  t = typeof x,
  tab = '\t';

 if (x === null) {
  r += "(null)\n";
 } else if (t == 'object') {

  l++;

  for (i = 0; i < l; i++) {
   tab += sep;
  }

  if (x && x.length) {
   t = 'Array';
  }

  r += '(' + t + ") \n";
  r += '('+"\n";


  for (i in x) {
   try {
    r += tab + '[' + i + '] => ' + print_jc(x[i], max, sep, (l + 1));
   } catch(e) {
    return "[ERROR: " + e + "]\n";
   }
  }
  r += ')';


 } else {

  if (t == 'string') {
   if (x == '') {
    x = '(empty)';
   }
  }

  r += '(' + t + ') ' + x + "\n";

 }

 return r;

}




TEST:
//var colors = new Array("red", "blue", "green");
var colors = ["red", "blue", "green"];
document.write('
');
document.write(print_jc(colors));
document.write('
');


Output:
(Array) 
(
  [0] => (string) red
  [1] => (string) blue
  [2] => (string) green
)



REFERENCES
http://scriptnode.com/article/javascript-print_r-or-var_dump-equivalent/

dump() - Javascript equivalent of PHP's print_r() function

SkyHi @ Monday, September 13, 2010
 The moment I saw the print_r() function of PHP, I fell in love with it. It is a very necessary function and I cannot understand why no other language supports it. JavaScript is one such language. So, I have ported the print_r function to javascript.


/**
 * Function : dump()
 * Arguments: The data - array,hash(associative array),object
 *    The level - OPTIONAL
 * Returns  : The textual representation of the array.
 * This function was inspired by the print_r function of PHP.
 * This will accept some data as the argument and return a
 * text that will be a more readable version of the
 * array/hash/object that is given.
 * Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php
 */
function dump(arr,level) {
 var dumped_text = "";
 if(!level) level = 0;
 
 //The padding given at the beginning of the line.
 var level_padding = "";
 for(var j=0;j<level+1;j++) level_padding += "    ";
 
 if(typeof(arr) == 'object') { //Array/Hashes/Objects 
  for(var item in arr) {
   var value = arr[item];
   
   if(typeof(value) == 'object') { //If it is an array,
    dumped_text += level_padding + "'" + item + "' ...\n";
    dumped_text += dump(value,level+1);
   } else {
    dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
   }
  }
 } else { //Stings/Chars/Numbers etc.
  dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
 }
 return dumped_text;
}



This is how the function is called. In this example we will give a complex array as the argument.
//Calling the function...
function init() {
 var arra = new Array("So long",'s',42,42.13,"Hello World");
 var assoc = {
  "val"  : "New",
  "number" : 8,
  "theting" : arra
 };
 
 alert(dump(assoc));
}
window.onload=init;

The result will be returned in the following format...
'val' => "New"
'number' => "8"
'theting' ...
   '0' => "So long"
   '1' => "s"
   '2' => "42"
   '3' => "42.13"
   '4' => "Hello World"



REFERENCES
http://www.openjs.com/scripts/others/dump_function_php_print_r.php