gpt4 book ai didi

javascript - 我的递归函数哪里出错了?

转载 作者:行者123 更新时间:2023-12-02 16:07:50 25 4
gpt4 key购买 nike

我正在开展一个学习项目,该项目要求我实现一个递归函数,该函数可以对传入的对象进行字符串化,而不使用 JSON.stringify。我必须将所有数据类型视为我的函数将接收的参数,虽然我对此很满意,但当传递数组/对象时我似乎感到困惑,并且我调用函数本身来迭代对象内容。我做得不对,我所做的每一个改变都会影响我认为我已经完成的其他领域,所以我的挫败感开始赢得这场战斗。我需要帮助的领域:

  1. 当我调用函数本身时,以与 JSON.stringify 相同的方式输出数组/对象的所有元素。我看到的一个问题的例子是,如果我传递一个像 ["SO"] 这样的数组,我会返回 [SO],但看起来我已经涵盖了这种可能性!

  2. 当函数作为参数传递时该怎么做,这是不允许的。

这是我到目前为止所拥有的。感谢您提供的任何帮助。

var myJSONRecursiveFunc = function (obj) {

var stringed = "";
var result;

if (Number.isInteger(obj)) {
return "" + obj + "";
} else if (obj === null) {
return "" + null + "";
} else if (typeof obj === "boolean") {
return "" + obj + "";
} else if (typeof obj === "string") {
return '"' + obj + '"';
} else if (Array.isArray(obj)) {
if (obj.length === 0) {
return "[" + obj + "]";
}
for (var i = 0; i < obj.length; i++) {
if (Array.isArray(i)) {
myJSONRecursiveFunc(i);
} else {
stringed += "" + obj[i] + ""
}
}
return result = "[" + stringed + "]";
} else {
for (var val in obj) {
if (typeof val === "object") {
myJSONRecursiveFunc(val);
}
stringed += "" + val + "" + ":" + "" + obj[val] + "" + '';
}
return result = "{" + stringed + "}";
}
};

它远非完美,因为我仍在学习,所以请让我知道我可以改进的地方以及使其按原样工作的任何帮助。

最佳答案

Output all elements of an array/object in the same way as JSON.stringify when I call the function on itself. An example of an issue I see is, if I pass an array like ["SO"], I am am getting [SO] returned, but it looks like I have that possibility covered!

您的 var val in obj 的递归只是传入val ,这是obj的关键。您需要调用myJSONRecursiveFunc(obj[val])为了得到正确的结果。此外,这对于您的阵列来说也是如此。您的 if 语句需要检查是否 obj[i]是一个数组,而不是 i这只是一个整数。在这种情况下,你需要说:

if (Array.isArray(obj[i])) {
myJSONRecursiveFunc(obj[i])
}

What to do when a function is passed as a param, which is not allowed.

您需要检查传入的函数是否为 typeof 的函数。 ,如:if (typeof func === function)

这是一个非常有趣的练习。几个月前我就这样做了,并且可以访问 Underscore 库来做到这一点。这是工作代码:

var stringifyJSON = function(obj) {
//Strings and null should be addressed here. Strings have quotes inside the string so I can't lump them together with booleans and numbers.
if (_.isString(obj)){
return '"' + obj.split('"').join('\\"') + '"';
}
if (_.isNull(obj)){
return 'null';
}
//Arrays get a temporary array that their stringified elements get pushed to, and then that temporary array is joined together and concatenated with the brackets that exist within the returned string.
if (_.isArray(obj)){
var tempArr = [];
_.each(obj, function(elem){
tempArr.push(stringifyJSON(elem));
});
return '[' + tempArr.join(',') + ']';
}
//Objects get a temporary string to add their stringified data to. Including a check for undefined values and function keys.
if (_.isObject(obj)){
var tempArr = [];
for (var k in obj){
if (_.isUndefined(obj[k]) || _.isFunction(k)){
return '{}';
} else {
tempArr.push(stringifyJSON(k) + ':' + stringifyJSON(obj[k]));
}
}
return '{' + tempArr.join(', ') + '}';
}
//Everything else = booleans, numbers
else {
return obj.toString();
}
};

关于javascript - 我的递归函数哪里出错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30552869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com