Ich arbeite an einem Problem, in dem ein Array als destrukturiertes Argument an eine Funktion übergeben wird, die dann verwendet wird, um rekursiv den Wert jedes Zahlenelements im Array zu verdoppeln. (Der Zweck der Übung ist es, eine Lösung zu entwickeln, ohne Verwendung von Array-Hilfsmethoden)Verständnis destructured Argumente rekursive Funktion
const numbers = [1, 2, 3]
// should return '[2, 4, 6]'
Hier ist die Lösung, die ich gefunden habe:
function double([first, ...rest]) {
if (rest.length) {
return [first * 2, ...double(rest)];
} else {
return [first * 2];
}
}
(FWIW habe ich auch bemerkt, dass diese Lösung funktioniert, wenn Sie die else
Bedingung weglassen.)
Ich bin schwer zu verstehen, wie die Operation first * 2
im zweiten Block zu rest
als Parameter zu übersetzt wird ...double(rest)
. Alle relevanten Eingaben/Referenzen würden sehr geschätzt!
Sie 'Rückkehr zuerst sprechen Sind [* 2]; 'im Block 'else'? Es hat nichts mit Ruhe zu tun. –
Es ist rekursiv, es nimmt eine beliebige Anzahl von Argumenten auf. Das erste Argument wird immer als "first" definiert, während der Rest der Argumente Restargumente verwendet und ein Array ist. Dann übergibt er diese Argumente an den nächsten rekursiven Aufruf, wobei die erste Zahl im Array 'rest' als 'first' zum nächsten Aufruf usw. übergeben wird, bis keine Argumente mehr vorhanden sind. – adeneo
Es wäre etwas besser, die Null zu machen check für den Fall des leeren Arrays (in diesem Fall wird 'first'' undefined', und du solltest '[]') zurückgeben. Dann würde es mit einem leeren Array einen Input geben, was jetzt nicht der Fall ist. –