Javascript.RU

PHP-функция: print_r

Зависит от

Javascript:

function print_r( array, return_val ) {	// Prints human-readable information about a variable
	// 
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// + namespaced by: Michael White (http://crestidg.com)

	var output = "", pad_char = " ", pad_val = 4;

	var formatArray = function (obj, cur_depth, pad_val, pad_char) {
		if(cur_depth > 0)
			cur_depth++;

		var base_pad = repeat_char(pad_val*cur_depth, pad_char);
		var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
		var str = "";

		if(obj instanceof Array) {
			str += "Array\n" + base_pad + "(\n";
			for(var key in obj) {
				if(obj[key] instanceof Array) {
					str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
				} else {
					str += thick_pad + "["+key+"] => " + obj[key] + "\n";
				}
			}
			str += base_pad + ")\n";
		} else {
			str = obj.toString(); // They didn't pass in an array.... why? -- Do the best we can to output this object.
		};

		return str;
	};

	var repeat_char = function (len, char) {
		var str = "";
		for(var i=0; i < len; i++) { str += char; };
		return str;
	};

	output = formatArray(array, 0, pad_val, pad_char);

	if(return_val !== true) {
		document.write("<pre>" + output + "</pre>");
		return true;
	} else {
		return output;
	}
}

Примеры:

print_r(['Kevin', 'van', 'Zonneveld']);
(печатает массив как в PHP)


Автор: Sirius (не зарегистрирован), дата: 6 октября, 2009 - 15:38
#permalink

Не совсем понятно условие в коде
if(obj instanceof Array)
в строке 16 и 19. Это препятствует распечатке хэшей (ну и других объектов), а только массивов.
Например
print_r(
{
name: "Sirius",
sex : "male"
},
false
);
напечатает просто [object Object], что ставит под сомнение полезность данной реализации.

Я бы заменил бы первое условие на
if(obj instanceof Array || obj instanceof Object) {
А второе на
if(obj[key] instanceof Array || obj[key] instanceof Object) {
что позволяет распечатывать хэши да и впринципе все объекты, что порой очень полезно при отладке


Автор: irrevion (не зарегистрирован), дата: 11 декабря, 2010 - 11:17
#permalink

Мой вариант (не заметил что страницы еще есть кроме первой, вот и написал сам):

var print_r = function(variable, deep, index) {
		if (variable===undefined) {alert('undefined'); return false;}
		if (deep===undefined) {var deep = 0;}
		if (index===undefined) {var index = '';} else {index+=': ';}
		var mes = '';
		var i = 0;
		var pre = '\n';
		while (i<deep) {pre+='\t'; i++;}
		if (typeof(variable)=='object') {
			mes+=pre+index+' {';
			for (index in variable) {
				mes+=print_r(variable[index], (deep+1), index);
			}
			mes+=pre+'}';
		} else {
			mes+=pre+index+variable;
		}
		if (deep) {return mes;} else {alert(mes);}
	}

Автор: puchuu (не зарегистрирован), дата: 17 марта, 2011 - 12:57
#permalink

очень плохо написано
напечатаете какой-нить элемент из дома и повиснет все. там же есть рекурсивный "all"
а еще не каждое свойство можно получить. нужно так писать тогда так:
try{
print_r(..);
} catch(..) {
console.log(..);
}


Автор: vls, дата: 4 ноября, 2011 - 16:56
#permalink

А так?

print_r = function(variable, deep, index) { // temporary utils
	if (variable===null) {var variable = 'null';}
	if (deep===undefined) {var deep = 0;}
	if (index===undefined) {var index = '';} else {index+=': ';}
	var mes = ''; var i = 0; var pre = '\n';
	while (i<deep) {pre+='\t'; i++;}
	if (variable && variable.nodeType!=undefined) {
		mes+=pre+index+'DOM node'+((variable.nodeType==1)? (' <'+variable.tagName+'>'): '');
	} else if (typeof(variable)=='object') {
		mes+=pre+index+' {';
		for (index in variable) {
			mes+=print_r(variable[index], (deep+1), index);
		}
		mes+=pre+'}';
	} else {
		mes+=pre+index+variable;
	}
	if (deep) {return mes;} else {alert(mes);}
}

Автор: ОлегА, дата: 28 марта, 2013 - 14:00
#permalink

Классная вещь, спасибо, работает отлично, лучше чем вариант в статье!


Автор: Гость (не зарегистрирован), дата: 23 марта, 2011 - 17:33
#permalink

а я юзаю
console.log(obj)
в консоли фаербага оно отображается как дерево


Автор: Serg_pnz, дата: 4 августа, 2011 - 09:57
#permalink

Пользуюсь такой функцией (спасибо http://www.openjs.com/scripts/others/dump_function_php_print_r.php)

function pre(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 alert(dumped_text);
}

Автор: miXOnIN, дата: 1 января, 2012 - 21:51
#permalink

В данном принт_р есть проблемы если в массиве есть функции, и если обьект является одновременно и обьектом и функцией или текстом, вот моя версия без этих проблем...

function print_r( array, return_val ) {
	var output = "", pad_char = " ", pad_val = 4;

	var formatArray = function (obj, cur_depth, pad_val, pad_char) {
		if(cur_depth > 0)
			cur_depth++;

		var base_pad = repeat_char(pad_val*cur_depth, pad_char);
		var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
		var str = "";

		if(typeof obj=='object' || typeof obj=='array' || (obj.length>0 && typeof obj!='string' && typeof obj!='number')) {
			if(!(typeof obj=='object' || typeof obj=='array'))str = '\n'+obj.toString()+'\n';
      str += '[\n';//"Array\n" + base_pad + "(\n";
			for(var key in obj) {
				if(typeof obj[key]=='object' || typeof obj[key]=='array' || (obj.length>0 && typeof obj!='string' && typeof obj!='number')) {
          str += thick_pad + ""+key+": "+((!(typeof obj=='object' || typeof obj=='array'))?'\n'+obj[key]+'\n':'')+formatArray(obj[key], cur_depth+1, pad_val, pad_char)+'\n';
				} else {
					str += thick_pad + ""+key+": " + obj[key] + "\n";
				}
			}
			str += base_pad + "]\n";
		} else {
			str = obj.toString();
		};

		return str;
	};

	var repeat_char = function (len, char) {
		var str = "";
		for(var i=0; i < len; i++) { str += char; };
		return str;
		return str;
	};

	output = formatArray(array, 0, pad_val, pad_char);
		return output;
}

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
3 + 2 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum