Oft habe ich das gleiche Problem: Ich möchte ein Array mit einer einfachen Bedingung filtern, z. Prüfe auf nicht / Gleichheit, größer als, kleiner als, enthält ...
Mein Code sieht so aus:
%Vor%Es wäre schön, Verknüpfungen zu so einfachen Operationen zu haben Ich habe einige Hilfsfunktionen erstellt:
%Vor%oder:
%Vor%Gibt es einen besseren Weg, wie man das in Javascript macht? Hat Javascript eingebaute Funktionen, um diese einfachen Vergleiche zu unterstützen?
Madox, du bist auf das Konzept des Currys gestoßen! Und Sie werden froh sein zu hören, dass es eine ganze JavaScript-Community gibt, die um diese Idee herum aufgebaut ist. Mit Ramda würde Ihr Code wie folgt aussehen:
%Vor%Und funktioniert .
Alles, was Ramda zur Verfügung stellt, ist eine Liste von "Curry-Hilfsfunktionen" wie die, die Sie gezeigt haben. Wenn Sie lieber Ihre eigenen Hilfsfunktionen verwenden möchten, dann möchten Sie vielleicht eine curry
Hilfsfunktion, die die Standardvorschrift reduziert: var isGreaterThan = curry(function(a, b){ return a > b })
. Diese Curry-Funktion wird von den meisten Utility-Bibliotheken wie Underscore, Lodash oder Ramda bereitgestellt.
Ich werde die Antwort von @ Avaq hier ein wenig erweitern. Du brauchst keine Lib wie Rambda, um Curry zu verwenden. Sie können dies heute mit ES6 beginnen.
Es scheint, dass Sie das Konzept hier bereits verstehen. Dies ist bereits eine Curry-Funktion. (Jede sequenzierte Funktion benötigt nur ein Argument)
%Vor%Mit ES6 Pfeilfunktionen wird dies viel einfacher.
%Vor% Beachten Sie, wie Sie den Operator >
auf einen <
in Ihrer Funktion umgedreht haben, um die Verwendung natürlicher erscheinen zu lassen? Bei Curry-Funktionen ist es üblich, zuerst den Operanden zu verwenden, der sich am wenigsten ändert. Mit gt
, denke ich, ist es besser, hier >
zu verwenden, da dies der Name unserer Funktion ist, aber stattdessen die Operanden umkehren. Deshalb sehen Sie, dass ich y > x
anstelle von x > y
zurückgebe. gt(5)
gibt eine Funktion y => y > 5
zurück, was sich für mich sehr natürlich anfühlt.
Ohne weitere Umschweife sehen wir, dass es in filter
Wenn Sie dies in einer ES5-Umgebung benötigen, können Sie es sehr einfach mit babel transpilieren. Das Ergebnis sollte sehr vertraut aussehen
%Vor%Und damit stehen Sie vor der funktionalen Programmierung. Es gibt eine Menge Spaß zu lernen. Mit der Art von Problem, die wir hier besprochen haben, denke ich, dass Sie daran interessiert wären, die Zusammensetzung der Funktionen zu erfahren.
>Hier ist eine grundlegende Zusammensetzung, um Ihren Appetit zu wecken
%Vor%Tags und Links javascript arrays functional-programming