Last active
May 6, 2022 12:45
-
-
Save worldoptimizer/07a2ce90cb1585897f1390bde9aa3edf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Converts a key and value to a string. | |
* | |
* @param {strin} key | |
* @param {string|number|boolean|object|function} value | |
* @param {string} indent | |
* @return {string} | |
*/ | |
function keyToString(key, value, indent) { | |
switch (typeof value) { | |
case "object": | |
if (Array.isArray(value)) { | |
return stringifyArray(value, indent+'\t'); | |
} else { | |
return stringifyObject(value, indent+'\t'); | |
} | |
break; | |
case "function": | |
return value.toString(); | |
break; | |
case "string": | |
return "\"" + value + "\""; | |
break; | |
case "number": | |
return value; | |
break; | |
case "boolean": | |
return value; | |
break; | |
default: | |
return value; | |
} | |
} | |
/** | |
* Converts an array to a string. | |
* | |
* @param {array} arr | |
* @param {string} indent | |
* @return {string} | |
*/ | |
function stringifyArray(arr, indent) { | |
let str = "["; | |
for (let i = 0; i < arr.length; i++) { | |
str += keyToString(i, arr[i], indent); | |
str += ","; | |
} | |
str += "]"; | |
return str; | |
} | |
/** | |
* Converts an object to a string. | |
* | |
* @param {object} obj | |
* @param {string} indent | |
* @return {string} | |
*/ | |
function stringifyObject(obj, indent) { | |
let str = "{"; | |
if (Object.keys(obj).length){ | |
for (let key in obj) { | |
str += "\n" + indent + "\t" + key + ": " + keyToString(key, obj[key], indent); | |
str += ","; | |
} | |
str += "\n" + indent + "}"; | |
} else { | |
str += "}"; | |
} | |
return str; | |
} | |
/** | |
* Converts an object or array to a string. | |
* | |
* @param {object} obj | |
* @param {number} indent | |
* @return {string} | |
*/ | |
function stringify(obj, indent) { | |
if (Array.isArray(obj)) { | |
return stringifyArray(obj, indent); | |
} else { | |
return stringifyObject(obj, indent); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment