【JS 算法題: 將 json 轉換為字符串】

題目簡介

其實就是手撕 JSON.stringfy()。

算法實現

輸入

原則上來說,輸入的是一個 json 對象。但需要考慮到異常情況,即輸入了其它類型的數據,比如:12, true, ‘abc’, [‘red’, ‘green’], null, undefined 等。
在這里插入圖片描述

輸出

輸出一個字符串。

實現

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

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 除外)

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);// }
}

在這里插入圖片描述

for (var prop in [1, 2, 3]) {console.log(prop);
}
// 0 1 2

判斷對象的實例屬性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719092.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719092.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【比較mybatis、lazy、sqltoy、mybatis-flex、easy-query操作數據】操作批量新增、分頁查詢(三)

orm框架使用性能比較 比較mybatis、lazy、sqltoy、mybatis-flex、easy-query操作數據 環境: idea jdk17 spring boot 3.0.7 mysql 8.0測試條件常規對象 orm 框架是否支持xml是否支持 Lambda對比版本mybatis????3.5.4sqltoy????5.2.98lazy????1.2.4…

鴻蒙實戰項目開發:【短信服務】

概述 本示例展示了電話服務中發送短信的功能。 樣例展示 涉及OpenHarmony技術特性 網絡通信 難度級別 中級 基礎信息 使用ohos.telephony.sms接口展示了電話服務中發送短信的功能。 效果預覽 新建聯系人首頁短信頁 使用說明: 首頁點擊創建聯系人&am…

每日一練:LeeCode-203. 移除鏈表元素 【鏈表+虛擬頭結點】

每日一練:LeeCode-203. 移除鏈表元素 【鏈表虛擬頭結點】 思路設置虛擬頭結點 本文是力扣 每日一練:LeeCode-203. 移除鏈表元素 【鏈表虛擬頭結點】 學習與理解過程,本文僅做學習之用,對本題感興趣的小伙伴可以出門左拐LeeCode-20…

自然語言處理(NLP)中NER如何從JSON數據中提取實體詞的有效信息

專欄集錦,大佬們可以收藏以備不時之需: Spring Cloud 專欄:http://t.csdnimg.cn/WDmJ9 Python 專欄:http://t.csdnimg.cn/hMwPR Redis 專欄:http://t.csdnimg.cn/Qq0Xc TensorFlow 專欄:http://t.csdni…

Nginx 和Tomcat比較

Nginx和Tomcat是兩種不同的技術,它們在應用場景、性能、動態處理能力等方面有所區別: 應用場景 Nginx通常用作靜態內容服務器或代理服務器,可以將外部請求轉發給其他應用服務器,如Tomcat、Django等。而Tomcat則主要用作應用服…

機器學習-面經(part3)

5. 正則化 5.0 手推L1,L2 5.1 什么是正則化,如何理解 定義: 在損失函數后加上一個正則化項(懲罰項),其實就是常說的結構風險最小化策略,即損失函數 加上正則化。一般模型越復雜,正則化值越大。 正則化項是用來對模型中某些參數進行約束,正則化的一般形式如下: 第一項是…

固件和內核驅動

驅動折騰小記 很多人更新了內核,但是自己的外設依然沒有驅動,是因為僅僅更新內核是不夠的,還需要更新固件。 什么是固件? 在許多設備能夠與操作系統通信之前,它們必須首先使用設備制造商提供的“固件”進行初始化。…

實施工程師常遇技術問題

文章目錄 一、對與一個項目,你認為項目的里程碑有哪幾個?二、Tomcat服務器與Resin服務器的區別2.1、開發商和許可證:2.2、部署和配置:2.3、功能和擴展性:2.4、社區和生態系統: 三、版本控制工具SVN與Git的區…

升級openssl

openssl版本一鍵升級(需要修改tar包名稱和路徑) --- - name: Install OpenSSLhosts: openssltasks:- name: Copy OpenSSL tar.gz to /tmpcopy:src: /root/shl/soft/openssl-1.1.1v.tar.gzdest: /tmp # remote_src: yes # 如果源文件在控制主機上…

吳恩達《機器學習》學習筆記

本筆記資料來源于 http://www.ai-start.com/ml2014/,該筆記來自于https://blog.csdn.net/dadapongi6/article/details/105668394,看了忘,忘了看,再看一遍。 時間統計:2024.2.29 5個番茄鐘,從week1開始&…

【PyTorch][chapter 19][李宏毅深度學習]【無監督學習][ GAN]【理論】

前言: 生成對抗網絡(Generative Adversarial Nets,GAN)是一種基于對抗學習的深度生成模型。 2014年,蒙特利爾博士 lan Goodfellow 發表了論文《Generative Adaversarial Networks》, 一經提出便成為了學術…

Python CGI編程

文章目錄 什么是CGICGI架構Web服務器支持及配置CGI程序示例CGI環境變量GET和POST方法GET方法POST方法區別注意事項 使用POST方法傳遞數據1. 創建HTML表單2. 編寫CGI腳本3. 配置服務器4. 提交表單5. 服務器處理請求注意事項 通過CGI程序傳遞checkbox數據創建HTML表單編寫CGI腳本…

二維碼門樓牌管理系統技術服務:門牌編設規則詳解

文章目錄 前言一、門牌編設規則解讀二、區間編號與分段編號策略三、多出入口建筑物的門牌編設 前言 隨著城市化的快速推進,門樓牌管理成為城市管理中不可或缺的一環。二維碼門樓牌管理系統的引入,不僅提升了管理的效率,也為市民提供了更為便…

波奇學Liunx:信號的產生,保存,處理

信號的產生,信號的保存,信號的處理 在操作系統中進程接受到信號會保存,產生 進程必須識別和能夠處理信號,處理信號是進程的內置功能 進程收到信號時不一定會立即執行,所以進程必然有一套識別,保存&#xff…

Leetcode 3066. Minimum Operations to Exceed Threshold Value II

Leetcode 3066. Minimum Operations to Exceed Threshold Value II 1. 解題思路2. 代碼實現 題目鏈接:Leetcode 3066. Minimum Operations to Exceed Threshold Value II 1. 解題思路 這一題的話只需要排序之后按照題目條件逐一進行執行直至滿足條件即可。 唯一…

Pytorch中,dim形象化的確切意義是什么?

在Pytorch中涉及張量的操作都會涉及“dim”的設置,雖然也理解個大差不差,但是偶爾還是有點犯迷糊,究其原因還是沒有形象化的理解。 首先,張量的維度排序是有固定順序的,0,1,2,.....…

(1)預處理

我們需要的文件結構如上 main.cpp add.h add.cpp add.h 這里使用riscv的工具鏈編譯為.i文件,需要使用-E,就是只進行預處理,我們可以得到兩個.i文件即main.i和add.i main.i 這里看到main.i里頭文件全部替換,然后多了三萬多行 所以…

Leetcode 3068. Find the Maximum Sum of Node Values

Leetcode 3068. Find the Maximum Sum of Node Values 1. 解題思路2. 代碼實現 題目鏈接:3068. Find the Maximum Sum of Node Values 1. 解題思路 這一題雖然標記為一道hard的題目,但其實就是一個腦筋急轉彎的題目。 我們只需要想明白一點即可&…

4G/5G執法記錄儀、智能安全帽走國標GB28181接入海康、宇視等大平臺,也可走平臺與平臺對接,以下級平臺級聯到上級大平臺

AIoT萬物智聯,智能安全帽生產廠家,執法記錄儀生產廠家,智能安全帽、智能頭盔、頭盔記錄儀、執法記錄儀、智能視頻分析/邊緣計算AI盒子、車載DVR/NVR、布控球、智能眼鏡、智能手電、無人機4G補傳系統等統一接入大型融合通信可視指揮調度平臺VM…

Vue3和ElementPlus封裝table組件

最近學習vue3.2并自己在寫一個項目,然后發現好幾個頁面都是列表頁,重復寫table和column也是覺得累,學習的項目列表頁不算多,要是公司項目就不一樣了,所以就想著自己封裝一個table組件,免去大量重復工作和co…