Convert Javascript Object (incl. functions) to String

后端 未结 10 1039
你的背包
你的背包 2020-12-29 21:35

Hey, Im trying to convert specific javascript objects to a String. So far I\'m working with json2.js. As soon as my Object contain functions, those functions are stripped. I

10条回答
  •  执念已碎
    2020-12-29 21:59

    I made a improved version based on the @SIMDD function, to convert all types of objects to string.

    Typescript code:

    function anyToString(valueToConvert: unknown): string {
        if (valueToConvert === undefined || valueToConvert === null) {
            return valueToConvert === undefined ? "undefined" : "null";
        }
        if (typeof valueToConvert === "string") {
            return `'${valueToConvert}'`;
        }
        if (
            typeof valueToConvert === "number" ||
            typeof valueToConvert === "boolean" ||
            typeof valueToConvert === "function"
        ) {
            return valueToConvert.toString();
        }
        if (valueToConvert instanceof Array) {
            const stringfiedArray = valueToConvert
                .map(property => anyToString(property))
                .join(",");
            return `[${stringfiedArray}]`;
        }
        if (typeof valueToConvert === "object") {
            const stringfiedObject = Object.entries(valueToConvert)
                .map((entry: [string, unknown]) => {
                    return `${entry[0]}: ${anyToString(entry[1])}`;
                })
                .join(",");
            return `{${stringfiedObject}}`;
        }
        return JSON.stringify(valueToConvert);
    }
    

    Vanilla Javascript code:

    function anyToString(valueToConvert) {
        if (valueToConvert === undefined || valueToConvert === null) {
            return valueToConvert === undefined ? "undefined" : "null";
        }
        if (typeof valueToConvert === "string") {
            return `'${valueToConvert}'`;
        }
        if (typeof valueToConvert === "number" ||
            typeof valueToConvert === "boolean" ||
            typeof valueToConvert === "function") {
            return valueToConvert.toString();
        }
        if (valueToConvert instanceof Array) {
            const stringfiedArray = valueToConvert
                .map(property => anyToString(property))
                .join(",");
            return `[${stringfiedArray}]`;
        }
        if (typeof valueToConvert === "object") {
            const stringfiedObject = Object.entries(valueToConvert)
                .map((entry) => {
                return `${entry[0]}: ${anyToString(entry[1])}`;
            })
                .join(",");
            return `{${stringfiedObject}}`;
        }
        return JSON.stringify(valueToConvert);
    }
    

    ATENTION!

    I am using the function Object.entries(), winch currently is a draft. So if you are not using Babel or typescript to transpile your code, you can replace it with a for loop or the Object.keys() method.

提交回复
热议问题