題目簡介
其實就是手撕 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