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

标签 javascript string object recursion

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

1)我将对象输出为字符串的函数,似乎只输出第一个值,而不输出其余值。

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 in 循环的理解是,它将打印对象中的每个键/值对,但它仅对第一个键/值这样做。使用递归,如何让它在每个键/值对上运行。

最佳答案

您的返回值位于 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 post获取一个函数来测试变量是否是对象。您可能不想在递归调用中包含数组。您可能想打印它们的内容。 (但这是另一个问题嘿)然后你的代码变成这样:

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
}

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

关于javascript - 在javascript中实现一个将对象转换为字符串的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520307/

相关文章:

string - 使用批处理脚本解析字符串

c# - c#中非静态字段的对象引用

Python - 将字符串拆分为字符,同时排除某个子字符串

c++ - Erase() 对 C++ 不起作用

postgresql - postgresql 9.4.5 中的对象类型是什么

excel - 用 Range 初始化 vba 类成员变量

javascript - 如何用jQuery制作确认密码?

Javascript 倒计时 - 不倒计时

JavaScript 对象/原型(prototype)。难道我的理解有误

javascript - URL 目标链接选项卡 - Zurb Foundation 选项卡