Question
Answer and Explanation
Implementing a custom JSON.stringify
function is a complex task, as the standard JavaScript JSON.stringify
handles various data types and edge cases. However, we can create a simplified version to understand the core concepts.
Here's how you can approach a basic implementation:
1. Handle Basic Types:
- Start by handling primitive data types like strings, numbers, booleans, and null.
2. Handle Arrays:
- Iterate through the array and recursively call the stringify
function for each element. Enclose the result in square brackets []
.
3. Handle Objects:
- Iterate through the object properties and recursively call the stringify
function for each value. Enclose the result in curly braces {}
with the key-value pairs separated by colons :
.
4. Recursive Approach:
- The implementation will be recursive since an object or array may contain other nested objects and arrays.
5. Handle Special Values:
- Be mindful of special values like undefined
, NaN
and Infinity
. The JSON.stringify
function will normally return null for undefined
and also handle numeric infinity values appropriately.
6. The Code:
function myStringify(obj) {
if (obj === null) {
return "null";
}
if (typeof obj === "boolean") {
return obj ? "true" : "false";
}
if (typeof obj === "number") {
return isFinite(obj) ? String(obj) : "null";
}
if (typeof obj === "string") {
return `"` + obj.replace(/"/g, '\\"') + `"`;
}
if (typeof obj === "undefined" || typeof obj === "function"){
return undefined;
}
if (Array.isArray(obj)) {
let result = "[";
for (let i = 0; i < obj.length; i++) {
let element = myStringify(obj[i]);
result += element === undefined ? "null" : element;
if (i < obj.length - 1) result += ",";
}
result += "]";
return result;
}
if (typeof obj === "object") {
let result = "{";
let keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
let value = myStringify(obj[key]);
if(value !== undefined) {
result += `"` + key + `":` + value;
if (i < keys.length - 1) result += ",";
}
}
result += "}";
return result;
}
return undefined;
}
Example Usage:
const myObject = { name: "John", age: 30, isStudent: false, courses: ["Math", "English"] };
const jsonString = myStringify(myObject);
console.log(jsonString); // Output: {"name":"John","age":30,"isStudent":false,"courses":["Math","English"]}
This simplified implementation demonstrates the basic logic of how JSON.stringify
works. Note that a complete implementation of JSON.stringify
includes handling more complex cases, such as circular references, which are not addressed in this basic example.