如何以字符串格式显示JavaScript对象的内容,就像我们警告变量时一样?
与显示对象的格式相同。
如何以字符串格式显示JavaScript对象的内容,就像我们警告变量时一样?
与显示对象的格式相同。
当前回答
你可以使用我的功能。使用数组或字符串或对象调用此函数,以提醒内容。
作用
function print_r(printthis, returnoutput) {
var output = '';
if($.isArray(printthis) || typeof(printthis) == 'object') {
for(var i in printthis) {
output += i + ' : ' + print_r(printthis[i], true) + '\n';
}
}else {
output += printthis;
}
if(returnoutput && returnoutput == true) {
return output;
}else {
alert(output);
}
}
用法
var data = [1, 2, 3, 4];
print_r(data);
其他回答
如果要使用alert打印对象,可以执行以下操作:
alert(“myObject是”+myObject.toSource());
它应该以字符串格式打印每个属性及其对应的值。
这是函数。
function printObj(obj) {
console.log((function traverse(tab, obj) {
let str = "";
if(typeof obj !== 'object') {
return obj + ',';
}
if(Array.isArray(obj)) {
return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
}
str = str + '{\n';
for(var p in obj) {
str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'\n';
}
str = str.slice(0,-2) + str.slice(-1);
str = str + tab + '},';
return str;
}('',obj).slice(0,-1)))};
它可以使用具有可读性的制表符缩进来显示对象。
循环引用解决方案
要从包含重复引用(在许多地方对同一对象的引用)(包括循环引用)的对象中生成不包含冗余信息的字符串,请使用JSON.stringify和replacer(在代码段中显示),如下所示
let s = JSON.stringify(obj, refReplacer(), 4);
函数refReplacer(){设m=new Map(),v=new Map),init=null;返回函数(字段,值){让p=m.get(this)+(Array.isArray(this)`[${field}]“:”.“+字段);让isComplex=value==对象(值)如果(isComplex)m.set(值,p);让pp=v.get(value)||'';let path=p.replace(/未定义\.\?/,“”);让val=pp`#REF:${pp[0]==“[”?“$”:“$.”}${pp}“:value;!初始化?(init=value):(val===init?val=“#REF:$”:0);if(!pp&&isComplex)v.set(value,path);返回值;}}// ---------------//测试// ---------------//具有重复引用的gen obj设a={a1:1,a2:2};设b={b1:3,b2:“4”};让obj={o1:{o2:a},b,a};//重复引用a.a3=[1,2,b];//循环引用b.b3=a;//循环引用让s=JSON.stringify(obj,refReplacer(),4);console.log;警报;
基于此(更多信息)的此解决方案为每个对象值创建类似JSONPath的路径,如果同一对象出现两次(或更多),则使用此路径的引用来引用该对象,例如#REF:$.bar.arr[3].foo(其中$表示主对象),而不是“渲染”整个对象(冗余度较低)
奖金:倒置
函数parseRefJSON(json){let objToPath=新映射();let pathToObj=新映射();let o=JSON.parse(JSON);让遍历=(父级,字段)=>{让obj=父级;let path=“#REF:$”;if(字段!==未定义){obj=父[字段];path=objToPath.get(父)+(Array.isArray(父)`[${field}]`:`${field?'。'+字段:''}`);}objToPath.set(obj,路径);pathToObj.set(路径,对象);let ref=路径目标获取(obj);如果(ref)父[字段]=ref;for(让f在obj中)if(obj==对象(obj))遍历(obj,f);}横向(o);返回o;}// ------------//测试// ------------设s=`{“o1”:{“o2”:{“a1”:1,“a2”:2,“a3”:[1.2.{“b1”:3,“b2”:“4”,“b3”:“#REF:$.o1.o2”}]}},“b”:“#REF:$.o1.o2.a3[2]”,“a”:“#REF:$.o1.o2”}`;console.log('打开Chrome控制台查看嵌套字段');let obj=parseRefJSON;console.log(obj);
显示对象内容的一种简单方法是使用console.log,如下所示
console.log("Object contents are ", obj);
请注意,我没有使用“+”连接对象。如果我使用“+”,那么我将只得到If对象的字符串表示,类似于[Objectobject]。
我更喜欢使用console.table来获得清晰的对象格式,所以假设您有这个对象:
const obj = {name: 'Alireza', family: 'Dezfoolian', gender: 'male', netWorth: "$0"};
您将看到一张整洁易读的表格,如下所示: