javascript - Wie führe ich eine entsprechende Funktion basierend auf dem Inhalt einer Variable aus?

WBOY
Freigeben: 2023-03-02 13:40:02
Original
1321 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

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.

Antwortinhalt:

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

Ä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 reduceforEach

    durch
<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Fügen Sie alle definierten Funktionen in ein Objekt ein, legen Sie den Rückgabewert fest und rufen Sie ihn auf

var ab={

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!