Heim >Web-Frontend >js-Tutorial >Wie kann eine Curry-JavaScript-Funktion Werte inkrementell summieren?

Wie kann eine Curry-JavaScript-Funktion Werte inkrementell summieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-28 14:48:16408Durchsuche

How Can a Curried JavaScript Function Incrementally Sum Values?

Inkrementelles Summieren von Werten mit einer variadischen Curry-Funktion

Können wir eine JavaScript-Funktionssumme erstellen, die sich wie folgt verhält?

sum(1)(2) = 3
sum(1)(2)(3) = 6
sum(1)(2)(3)(4) = 10

Kurz gesagt, die Funktion sollte es uns ermöglichen, durch wiederholte Eingabe zusätzlicher Summen eine Summe zu akkumulieren Werte.

Zunächst wurde uns gesagt, dass eine solche Funktion in JavaScript unmöglich sei. Es entstand jedoch ein alternativer Ansatz: Hinzufügen eines Vorzeichens vor der Summenfunktion.

+sum(1)(2)(3)(4)

Wenn das Vorzeichen in Verbindung mit einer Funktion verwendet wird, wandelt es den Rückgabewert der Funktion in eine Zahl um. In diesem Fall gibt die Funktion sum also tatsächlich Zahlen zurück, die dann bei jedem weiteren Aufruf erhöht werden.

Um das gewünschte Verhalten zu erreichen, können wir in unserer Summenfunktion eine Currying-Technik anwenden. So sieht die Implementierung aus:

function sum(n) {
  var v = function(x) {
    return sum(n + x);
  };

  v.valueOf = v.toString = function() {
    return n;
  };

  return v;
}

console.log(+sum(1)(2)(3)(4)); // Output: 10

Diese Implementierung verpackt die Summenfunktion in der v-Variablen, die dann zurückgegeben wird. Mit der v-Funktion können wir der n-Variablen schrittweise Werte hinzufügen. Indem wir v mithilfe des Operators auf eine Zahl umwandeln, können wir die kumulierte Summe erhalten.

Im Beispiel gibt die Anweisung console.log 10 aus, was der Summe von 1, 2, 3 und 4 entspricht.

Das obige ist der detaillierte Inhalt vonWie kann eine Curry-JavaScript-Funktion Werte inkrementell summieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn