下面代码中的替换器在控制台上写入当前处理的字段名称
let a = { a1: 1, a2:1 }
let b = { b1: 2, b2: [1,a] }
let c = { c1: 3, c2: b }
let s = JSON.stringify(c, function (field,value) {
console.log(field); // full path... ???
return value;
});Run Code Online (Sandbox Code Playgroud)
但是我想在替换函数中获得字段的完整“路径”(不仅仅是它的名称) - 像这样
c1
c2
c2.b1
c2.b2
c2.b2[0]
c2.b2[1]
c2.b2[1].a1
c2.b2[1].a2
Run Code Online (Sandbox Code Playgroud)
怎么做?
replacerWithPath在代码片段中确定路径使用this(感谢@Andreas提供此提示),field以及value在执行期间存储的一些历史数据(并且此解决方案支持数组)
JSON.stringify(c, replacerWithPath(function(field,value,path) {
console.log(path,'=',value);
return value;
}));
Run Code Online (Sandbox Code Playgroud)
JSON.stringify(c, replacerWithPath(function(field,value,path) {
console.log(path,'=',value);
return value;
}));
Run Code Online (Sandbox Code Playgroud)
奖励:我在这里使用这种方法来字符串化具有循环引用的对象