0%

手写 JSON.stringify ?

前面一阵,想看一下 JSON.stringify 方法得递归逻辑,被人说成这么简单的一个函数随便几分钟手写一个,然后扯到深拷贝,又扯到容易被循环引用

我简单看了一下这个函数的源码,1000多行,很大一部分我看不懂,但是也找到它不套娃的原因了。

简介

JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。

用例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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,还要加入回车换行,这个稍微努力一下还是可以写出来的