【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 分钟前
分享一个THREE.JS中无限滚动的技巧
前端·javascript·css
96771 分钟前
多线程编程:整个互斥的流程以及scoped_lock的用法,以及作用,以及 硬件上的原子操作和逻辑上的原子操作
开发语言·c++·算法
liuyao_xianhui3 分钟前
优选算法_topk问题_快速排序算法_堆_C++
java·开发语言·数据结构·c++·算法·链表·排序算法
LXXgalaxy3 分钟前
Vue3 + TypeScript 20 个常见报错
javascript·ubuntu·typescript
liuyao_xianhui5 分钟前
优选算法_堆_最后一块石头的重量_C++
java·开发语言·c++·算法·链表
羊小猪~~8 分钟前
算法/力扣--栈与队列经典题目
开发语言·c++·后端·考研·算法·leetcode·职场和发展
扶摇接北海1769 分钟前
洛谷:P1035 [NOIP 2002 普及组] 级数求和
算法
晓131312 分钟前
React篇——第五章 React Router实战
开发语言·javascript·ecmascript
不超限13 分钟前
InfoSuite AS部署Vue项目
前端·javascript·vue.js
WitsMakeMen14 分钟前
RankMixer论文理解
算法