Ich versuche, JSON.stringify() rekursiv zu replizieren. Ich bin ein wenig verwirrt, warum ich in meiner zurückgegebenen JSON-Zeichenfolge undefiniert bin. Hier ist, was ich bisher getan:Rekursion verwenden, um eine JSON-Zeichenfolge zu erstellen (replizieren stringify)
var testobj = {num:123,str:"This is a string",bool:true,o:{x:1,y:2},iamnull:null}
var count = 0
var stringifyJSON = function(obj) {
// your code goes here
if(obj === undefined){
\t return console.log("obj was undefined");
}
count = count + 1
if(count > 20){ //I put this here mostly to stop infinite loops assuming this function wouldn't occur over 20 times.
\t return console.log("failed")
}
var endarray = [];
if(obj !== undefined && typeof(obj)==='object'){ //If the object isn't undefined and the object is an object...
for(var prop in obj){
\t console.log('"' + prop + '"');
\t endarray.push(stringifyJSON(prop) +'"' + ':' +'"'+ stringifyJSON(obj[prop])) //push the items into the array, using recursion.
}
if(typeof(obj) !== undefined){
\t return '{' + endarray.join() + '}'
}
}
};
//end result is "{undefined":"undefined,undefined":"undefined,undefined":"undefined,undefined":"{undefined":"undefined,undefined":"undefined},undefined":"{}}"
//JSON values cannot be a function, a date, or undefined
Könnte jemand zeigen, wo ich falsch gehe? Bei der Rekursion habe ich ein Problem, die Ursache des Problems zu identifizieren.
Mit Rekursion versuchen Sie, ein Ergebnis irgendeiner Art zu sammeln. In diesem Fall "Endarray". Sie setzen es jedoch in jeder Iteration Ihrer Rekursion auf ein leeres Array zurück. Sie müssen "endarray" außerhalb der rekursiven Funktion deklarieren und Ihre Ergebnisse aufbauen, bis Sie fertig sind. – rasmeister
'typeof (obj)! == undefined' Dies wird immer 'wahr' sein. Verwenden Sie 'typeof' nicht, um nach' undefined' zu suchen. Es ist ein kurzsichtiger und unnötiger Hack, der nur Probleme verursacht. –
Sie können 'stringifyJSON' definieren, um zwei Parameter zu akzeptieren, überprüfen Sie, ob 'endarray' definiert ist, wenn ja, drücken Sie Werte auf das Array, andernfalls erstellen Sie' endarray'. Beachten Sie jedoch, dass native 'JSON.stringify()' - Implementierung mehr als nur ein Objekt oder Array als Parameter akzeptieren kann. – guest271314