前面一阵,想看一下 JSON.stringify
方法得递归逻辑,被人说成这么简单的一个函数随便几分钟手写一个,然后扯到深拷贝,又扯到容易被循环引用
我简单看了一下这个函数的源码,1000 多行,很大一部分我看不懂,但是也找到它不套娃的原因了。
简介
JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。
用例
let data = [
{
id: 1,
children: [
{ id: 2, children: [{ id: 3, children: [{ id: 4 }, { id: 5 }] }] },
],
},
];
let str = JSON.stringify(
data,
(k, v) => {
console.log('k,v', k, v && JSON.stringify(v));
if (
Object.prototype.toString.call(v) === '[object Object]' &&
'children' in v
) {
const c = v.children;
v.group = c;
}
return v;
},
2
);
console.log(str);
console.log(data);
特点分析
就上面这个用例,先看看输出一个用 2 个空格作为缩进的字符串 JSON,还要加入回车换行,这个稍微努力一下还是可以写出来的