【JS 算法题: 将 json 转换为字符串】

题目简介

其实就是手撕 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

判断对象的实例属性

相关推荐
福尔摩斯张1 天前
C++核心特性精讲:从C语言痛点出发,掌握现代C++编程精髓(超详细)
java·linux·c语言·数据结构·c++·驱动开发·算法
前端一小卒1 天前
一个看似“送分”的需求为何翻车?——前端状态机实战指南
前端·javascript·面试
syt_10131 天前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript
涛涛北京1 天前
【强化学习实验】- 策略梯度算法
人工智能·算法
长安牧笛1 天前
儿童屏幕时间管控学习引导系统,核心功能,绑定设备,设时长与时段,识别娱乐,APP超时锁屏,推荐益智内容,生成使用报告,学习达标解锁娱乐
javascript
栀秋6661 天前
深入浅出链表操作:从Dummy节点到快慢指针的实战精要
前端·javascript·算法
Pyeako1 天前
机器学习之KNN算法
人工智能·算法·机器学习
青青很轻_1 天前
Vue自定义拖拽指令架构解析:从零到一实现元素自由拖拽
前端·javascript·vue.js
xhxxx1 天前
从被追问到被点赞:我靠“哨兵+快慢指针”展示了面试官真正想看的代码思维
javascript·算法·面试
可信计算1 天前
【算法随想】一种基于“视觉表征图”拓扑变化的NLP序列预测新范式
人工智能·笔记·python·算法·自然语言处理