Ich bin ein Algebra-Rechner zu bauen und ich arbeite an einer rekursiven Funktion zum Filtern von Begriffen aus einem Polynom. Die folgende Funktion arbeitet so, dass sie das gewünschte Array von Arrays mit ähnlichen Termen erzeugt. Ich kann dies überprüfen, indem ich der Funktion eine console.log-Anweisung hinzufüge. Aus irgendeinem Grund gibt die Funktion die Ausgabe jedoch nicht zurück. Es gibt "undefined" zurück.Rekursive Javascript-Funktion mit Argumenten Eigenschaft gibt die richtige Antwort, aber gibt undefined zurück
Mein Denken ist, dass die Kette der rekursiven Aufrufe mit der unten angegebenen Endbedingung enden sollte, und übergeben Sie dann das zurückgegebene Argument [1] -Array durch den Stapel.
Ich habe ähnliche Fragen hier gelesen, wo die Person vergisst, eine Return-Anweisung an einem oder mehreren Orten zu setzen. In meinem Code habe ich jedoch eine return-Anweisung mit der Endbedingung und mit dem rekursiven Funktionsaufruf. Es ist wahrscheinlich etwas einfaches, das ich vermisse.
var filterLikeTerms = function (terms) { //takes an array of terms, optional second argument is an array of arrays of similar terms
if (!arguments[1]) arguments[1] = []; //Initilizes the second argument if none is given
if (terms.length == 0) return arguments[1]; //End condition
arguments[1].push(terms.filter(term => terms[0].toString() === term.toString())); //Adds similar terms to the 2nd argument array
terms = terms.filter (term => terms[0].toString() !== term.toString()); //shortens the terms array to exclude the like terms filtered above
return filterLikeTerms(terms, arguments[1]); //recursive function call
}
Post, was Sie rufen 'filterLikeTerms' mit auf? Sie rufen '.toString' für eine Eigenschaft auf, die als Zeichenfolge übergeben werden muss. Sie können nicht "7x + 1" als Wert übergeben. Es wäre schon eine Zeichenfolge. Zweite Anmerkung, es scheint, als ob der Code versucht, schlau zu sein. Machen Sie einen Schritt zurück, machen Sie es einfach, durchzulaufen und optimieren Sie später. – VtoCorleone
Vielleicht verstehe ich die Frage nicht, aber wenn ich 'console.log (filterLikeTerms (['A', 'B', 'C', 'D']))', druckt Array von Arrays und nicht undefiniert .. – bigless
Sie können Parameter 'arguments' nicht an die Methode übergeben, da sie nur einen Parameter akzeptieren:' terms'. Ich denke, Sie müssen die Methode machen, um 2 Parameter 'filterLikeTerms (Begriffe, Argumente) 'zu akzeptieren. Ein Beispiel für den Prozess kann Ihre Fragen verständlicher machen, wie die Beispieleingaben und die erwarteten Ausgaben. – Eaton