题目简介
其实就是手撕 JSON.stringfy()。
算法实现
输入
原则上来说,输入的是一个 json 对象。但需要考虑到异常情况,即输入了其它类型的数据,比如:12, true, 'abc', ['red', 'green'], null, undefined 等。
输出
输出一个字符串。
实现
javascript
function jsonToString(obj) {
if (typeof obj === 'undefined') return undefined;
if (typeof obj === 'string') return `"${obj}"`;
if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null ) {
return String(obj);
}
if (Array.isArray(obj)) {
const arrJson = obj.map(item => jsonToString(item));
return `[${arrJson.join(',')}]`;
}
if (typeof obj === 'object') {
const res = []
for (const key in obj) {
if (obj.hasOwnProperty(key)) { // 对象实例上的属性
const valueStr = jsonToString(obj[key]);
res.push(`"${key}":${valueStr}`);
}
}
return `{ ${res.join(',')} }`;
}
}
测试case
javascript
const jsonArr = [1, 2, [3, 4, 5, [3333, 'dd', {name: 'denny', age: {xx: '12'}}], true]];
const jsonObj = {
name: 'denny',
city: ['sh', 'bj', 'xa'],
info: {
age: 12,
school: {}
}
}
相关知识
数据类型转换
数据类型判断
判断一个值是否为对象
数组循环遍历
对象循环遍历
for...in...
遍历对象的可枚举属性(包含继承的可枚举属性)(symbol 除外)
javascript
var triangle = { a: 1, b: 2, c: 3 };
function ColoredTriangle() {
this.color = "red";
}
ColoredTriangle.prototype = triangle;
var obj = new ColoredTriangle();
for (var prop in obj) {
// if (obj.hasOwnProperty(prop)) {
console.log(prop);
// }
}
javascript
for (var prop in [1, 2, 3]) {
console.log(prop);
}
// 0 1 2