实现一个递归函数,将对象转换为javascript中的字符串

Implement a recursive function that converts an object to a string in javascript

本文关键字:转换 对象 javascript 字符串 递归函数 一个 实现      更新时间:2023-09-26

我有一个项目,要求我在不使用stringify的情况下将Object转换为字符串。这样做的目的是实现一个递归函数,将对象转换为字符串。我似乎有两个问题:

1( 我的函数将Object输出为字符串,似乎只输出第一个值,而不是其他值

function myToString(argObj) {
    var str = "";
    for (var val in argObj) {
        if (argObj.hasOwnProperty(val)) {
            str += val + " : " + argObj[val] + "'n";
            console.log(str);
        }
        return str;
    }
}

2( 我对以上循环中的理解是,它会打印对象中的每个键/值对,但它只打印第一个键/值。使用递归,我如何让它在每个键/值对上运行。

您在for循环中有返回值,这意味着它在第一次迭代时就返回了

function myToString(argObj) {
    var str = "";
    for (var val in argObj) {
        if (argObj.hasOwnProperty(val)) {
            str += val + " : " + argObj[val] + "'n";
            document.write(str);
        }
    }
    return str;
}

之后,您想知道argObj的任何属性是否是对象,这样您就可以递归地调用其中任何属性的函数。从这个SO帖子中获取一个函数来测试变量是否是对象。您可能不希望在递归调用中包含数组。你可能想打印它们的内容。(但这是另一个问题,嘿(然后你的代码变成这样:

function myAndSomeGuyOnStackOverflowToString(argObj) {
    var str = "";
    for (var val in argObj) {
        if (argObj.hasOwnProperty(val)) {
            var propertyValue = argObj[val];
            if (isAnObject(propertyValue)){
                propertyValue = myAndSomeGuyOnStackOverflowToString(propertyValue)
            }
            str += val + " : " + propertyValue + "'n";
            document.write(str);
        }
    }
    return str;
}
function isAnObject(objArg){
   //choose your implementation from the many on that other post I mentioned
}

通过一些缩进和字符串格式设置,您应该可以顺利完成。

function myToString(argObj, res) {
    if ( argObj !== null && typeof argObj === "object") {
        for (var val in argObj)    
            res += val + " : " + argObj[val] + "'n";
    }
    if (typeof argObj === "number" || typeof argObj === "string")
        return res + argObj;
    return res;
}

通过调用myToString(object, "")来调用此函数,它将返回一个字符串。希望它能帮助你,或者给你一些递归写作的想法。