在javascript中打印console.log之类的对象(包含很多信息)

时间:2019-03-23 11:47:24

标签: javascript node.js google-chrome

我需要发送一封电子邮件,其中包含JS对象的console.log输出。这里是一个代码示例:

let array_multi = [];
array_multi["07:00"] = ["one","two","three"];
array_multi["08:00"] = ["foo","bar","foo"];
array_multi["09:00"] = ["lorem"];
console.log(array_multi);

在我的控制台中,结果如下:

enter image description here

是否有某种方法可以以纯文本格式获取此输出,还是应该编写自定义解析函数?

3 个答案:

答案 0 :(得分:2)

如果您使用的是JSON.strigify,则会获得完整的数据,但是有一些缺点:

  • 数组的字符串属性,函数和其他数据结构将被完全忽略(因此,序列化数据将不起作用¹)
  • 循环引用无法序列化
  • 无法从中看到继承

您可以这样做:

let array_multi = {};
array_multi["07:00"] = ["one","two","three"];
array_multi["08:00"] = ["foo","bar","foo"];
array_multi["09:00"] = ["lorem"];

// logs as object
console.log(array_multi);
console.log(typeof array_multi);

// parse and convert to string
console.log(JSON.stringify(array_multi)); 
console.log(typeof JSON.stringify(array_multi));


在NodeJS上,您还有另一个选项util.format,它将返回与在NodeJS控制台中看到的字符串相同的内容。虽然它确实使您可以深入了解不同的数据类型和关系,但是它无法向您显示交互式控制台可以显示的同一棵无限树,因此只能向您展示大图的一小部分。


¹:array_multi实际上应该是一个对象,而不是一个数组,因为数组应该只具有数字键。

答案 1 :(得分:0)

经过大量搜索之后,正确的方法是编写一个自定义函数(chrome在开发工具内核中只有一次)
解决方案:

let array_multi = [];
array_multi["07:00"] = ["one","two","three"];
array_multi["08:00"] = ["foo","bar","foo"];
array_multi["09:00"] = ["lorem"];


function print_js_element(elm, show_content = false){
	
	let output_res = "{\n";


	let object_keys = Object.keys(elm);

	object_keys.some(function(key,index) {

		output_res += "\t" + key + ": (" + elm[key].length + ")";

		if(show_content){
			output_res += " " + JSON.stringify(elm[key]);
		}

		output_res += "\n";
	});

	output_res += "\n}";
	return output_res;

}


console.log(print_js_element(array_multi,false));
console.log(print_js_element(array_multi,true));

答案 2 :(得分:-1)

首先将此数组转换为对象:

let array_multi = [];
array_multi["07:00"] = ["one","two","three"];
array_multi["08:00"] = ["foo","bar","foo"];
array_multi["09:00"] = ["lorem"];

let arrObj = {...array_multi};

console.log(JSON.stringify(arrObj));