【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

判断对象的实例属性

相关推荐
一叶祇秋9 分钟前
Leetcode - 周赛417
算法·leetcode·职场和发展
李是啥也不会12 分钟前
数组的概念
javascript
武昌库里写JAVA14 分钟前
【Java】Java面试题笔试
c语言·开发语言·数据结构·算法·二维数组
ya888g15 分钟前
GESP C++四级样题卷
java·c++·算法
无咎.lsy23 分钟前
vue之vuex的使用及举例
前端·javascript·vue.js
fishmemory7sec30 分钟前
Electron 主进程与渲染进程、预加载preload.js
前端·javascript·electron
fishmemory7sec33 分钟前
Electron 使⽤ electron-builder 打包应用
前端·javascript·electron
Funny_AI_LAB42 分钟前
MetaAI最新开源Llama3.2亮点及使用指南
算法·计算机视觉·语言模型·llama·facebook
NuyoahC1 小时前
算法笔记(十一)——优先级队列(堆)
c++·笔记·算法·优先级队列
jk_1011 小时前
MATLAB中decomposition函数用法
开发语言·算法·matlab