JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串
官方文档请去这里:developer.mozilla.org/zh-CN/docs/…
观察JSON.stringfy作用
JSON.stringify(null)
'null'
JSON.stringify(undefined)
undefined
JSON.stringify(1)
'1'
JSON.stringify("1")
'"1"'
JSON.stringify(true)
'true'
JSON.stringify([1,2,3])
'[1,2,3]'
JSON.stringify({a:1})
'{"a":1}'
JSON.stringify([null, undefined, 1, "1", true, [1,2,3], {a:{b:1}}])
'[null,null,1,"1",true,[1,2,3],{"a":{"b":1}}]'
开写
function toJSON (data) {
const type = typeof data;
switch (type) {
case "string":
return `"${data}"`
case "boolean":
case "number":
return data + ""
case "undefined":
return undefined
case "object":
if (data === null) {
return "null"
} else if (Array.isArray(data)) {
// 递归
return `[${data.map(i => toJSON(i)).join(',')}]`
} else {
// 1. 先获取对象中的key-value二维数组
const kvArr = Object.entries(data)
// 2. 将key-value 进行toJSON
const kvMap = kvArr.map(([key, value]) => {
// 递归
return `"${key}":${toJSON(value)}`
// 注意:这里之所以键没用${toJSON(key)}
// 而是"${key}",是为了处理key为undefined情况
})
// 3. 拼接成'{"key":"value"}'的格式返回
return `{${kvMap.join(',')}}`
// 上面3步也可以合成1步
// return `{${Object.entries(data).map(([key, value]) => `"${key}":${toJSON(value)}`).join(",")}}`;
}
}
}
目标输出
注:列表里有元素为undefined情况未处理
各位看官看下有没有好的方法解决,欢迎互动区评论!感谢!
之后想到好的方法我再补充!