Heim > Artikel > Backend-Entwicklung > javascript - Wie führe ich eine entsprechende Funktion basierend auf dem Inhalt einer Variable aus?
Ich habe mehrere Funktionen funA(x), funB(x), funC(x), funD(x), funE(x), funF(x) geschrieben. Jetzt habe ich eine Anforderung, basierend auf einem bestimmten Parameterstr, um verschiedene Berechnungen durchzuführen. Wenn beispielsweise str='abc' ist, kann x→funA(x)→funB(x)→funC(x)→y ausgeführt werden. Wenn str'ace', x→funA(x) ist. →funC(x)→funE(x)→y.
<code>function fun_abc(x) { var a = funA(x); var b = funB(a); var c = funC(b); var y = c; return y; }</code>
Ich weiß, dass ich einen Schalter schreiben kann, um einen Fall basierend auf str zu erstellen und zu verschiedenen fun_XXX() zu springen, aber das ist nicht flexibel. Mein ultimatives Ziel ist es, ein Array mit verschiedenen Funktionsnamen der Reihe nach zu schreiben. Geben Sie beim Aufruf x ein, führen Sie die Funktion aus, die dem ersten Element im Array entspricht, und geben Sie das Endergebnis y aus.
Gibt es eine andere Möglichkeit, es abzukürzen? Oder kann eine freie Kombination erreicht werden, indem beispielsweise direkt eine Funktion mit demselben Namen basierend auf einer Variablen wie funstr='abc' ausgeführt wird und so etwas wie funstr(x) ausgeführt wird, wird die Funktion abc(x) ausgeführt?
JS- oder PHP-bezogene Syntax ist akzeptabel.
Ich habe mehrere Funktionen funA(x), funB(x), funC(x), funD(x), funE(x), funF(x) geschrieben. Jetzt habe ich eine Anforderung, basierend auf einem bestimmten Parameterstr, um verschiedene Berechnungen durchzuführen. Wenn beispielsweise str='abc' ist, kann x→funA(x)→funB(x)→funC(x)→y ausgeführt werden. Wenn str'ace', x→funA(x) ist. →funC(x)→funE(x)→y.
<code>function fun_abc(x) { var a = funA(x); var b = funB(a); var c = funC(b); var y = c; return y; }</code>
Ich weiß, dass ich einen Schalter schreiben kann, um einen Fall basierend auf str zu erstellen und zu verschiedenen fun_XXX() zu springen, aber das ist nicht flexibel. Mein ultimatives Ziel ist es, ein Array mit verschiedenen Funktionsnamen der Reihe nach zu schreiben. Geben Sie beim Aufruf x ein, führen Sie die Funktion aus, die dem ersten Element im Array entspricht, und geben Sie das Endergebnis y aus.
Gibt es eine andere Möglichkeit, es abzukürzen? Oder kann eine freie Kombination erreicht werden, indem beispielsweise direkt eine Funktion mit demselben Namen basierend auf einer Variablen wie funstr='abc' ausgeführt wird und so etwas wie funstr(x) ausgeführt wird, wird die Funktion abc(x) ausgeführt?
JS- oder PHP-bezogene Syntax ist akzeptabel.
Lassen Sie mich ein Beispiel geben: Eval ist zu unhöflich. . . Großer Bruder, komm und sieh mich
<code>function run(str, param) { let handle = { a: a, b: b, c: c, d: d }; return str.split('').reduce((res, name) => handle[name](res), param); function a(x) { return x + '1'; } function b(x) { return x + '2'; } function c(x) { return x + '3'; } function d(x) { return x + '4'; } } run('acb',0); // "0132"</code>
Ähnliche Ideen können beispielsweise frei verwendet werden
Verbessert auf Basis von @Fisch, der keine Tomaten mag
Jedes Mal, wenn Sie die Funktion run
aufrufen, müssen vier Funktionen und eine Karte generiert werden, was ziemlich teuer ist. Sie können es run
nach draußen tragen.
Ersetzen Sie reduce
forEach
<code>const funcTable = { a, b, c, d } function run(str, initialVal) { return str.split('').reduce((result, funcName) => funcTable[funcName](result), initialVal) } // 定义function a, function b...</code>
Das einfachste, eval
Ärgerlich {'abc': fabc🎜>
Die Idee ist sehr einfach, ich werde einen Beispielcode für
und php
node
veröffentlichen
Versionphp
<code>function funstr($str,$param){ $len = strlen($str); for($i=0;$i<$len;$i++){ $fun = 'fun'.strtoupper(substr($str,$i,1)); if(function_exists($fun)){ $param = $fun($param); } } return $param; } function funA($x) { return $x+1; } function funB($x) { return $x+2; } echo funstr('ab',0); // 输出3</code>
Versionnode
<code>function funstr(str,x) { var len = str.length; for(var i=0; i<len; i++){ var fun = 'fun'+ str.charAt(i).toUpperCase(); x = eval(fun+'('+x+')'); } return x; } function funA(x){ return x+1; } function funB(x){ return x+2; } console.log(funstr('ab',0));//输出3</code>
Fügen Sie alle definierten Funktionen in ein Objekt ein, legen Sie den Rückgabewert fest und rufen Sie ihn auf
var ab={