Skip to content

Instantly share code, notes, and snippets.

@worldoptimizer
Last active May 6, 2022 12:45
Show Gist options
  • Save worldoptimizer/07a2ce90cb1585897f1390bde9aa3edf to your computer and use it in GitHub Desktop.
Save worldoptimizer/07a2ce90cb1585897f1390bde9aa3edf to your computer and use it in GitHub Desktop.
/**
* 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