javascript - 如何根据变量内容运行相应函数?
巴扎黑
巴扎黑 2017-04-11 13:31:43
0
5
211

我写了几个函数 funA(x)、funB(x)、funC(x)、funD(x)、funE(x)、funF(x),我现在有个需求,根据某个参数str,实现不同的计算。比如当str=‘abc’时,能执行 x→funA(x)→funB(x)→funC(x)→y ,当 str‘ace’ 时,能执行x→funA(x)→funC(x)→funE(x)→y 。

function fun_abc(x) { var a = funA(x); var b = funB(a); var c = funC(b); var y = c; return y; }

我知道可以写一个 switch 根据 str 做 case,跳到不同的 fun_XXX() 中,但是这样不灵活。我最终目的是希望有一个数组,数组中按顺序写着不同的函数名,调用时输入x,从数组中第一个元素对应的函数一直运行到最后一个函数,输出最终结果y。

是否有其他办法能简写?或者能做到自由组合,比如直接根据变量执行同名函数,类似 funstr='abc' 时,运行类似 funstr(x) 执行的就是 function abc(x)?

js 或 php 相关语法都可以。

巴扎黑
巴扎黑

membalas semua (5)
阿神

我来举个例子,eval太粗暴了。。。大兄弟来看看我这个

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"

举个例子,类似思路可以自由发挥

    巴扎黑

    @不爱吃西红柿的鱼 的基础上改进下

    • 每次callrun函数的时候,都要生成四个函数和一个map,比较费开销。可以拎到run外面。

    • reduce代替forEach

    const funcTable = { a, b, c, d } function run(str, initialVal) { return str.split('').reduce((result, funcName) => funcTable[funcName](result), initialVal) } // 定义function a, function b...
      伊谢尔伦

      最简单,eval
      麻烦点{'abc': fabc}

        伊谢尔伦

        思路很简单,phpnode我都贴个示例代码吧

        php版本

        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

        node版本

        function funstr(str,x) { var len = str.length; for(var i=0; i
          黄舟

          把该定义的函数都放在一个对象里,设置好返回值在去调用不就行啦;
          var ab={

          a:function(x){console.log(x);return 1}, b:function(x){console.log(x);return 2}, c:function(x){console.log(x);return 3}, d:function(x){console.log(x);return 4}, } function run(str,x){//str是定义的顺序,如acb;x是你要传的参数 var b=x; var aa=str.split("") aa.forEach(function(x){ ab[x](b); b=ab[x](b); }) return b }
            Muat turun terkini
            Lagi>
            kesan web
            Kod sumber laman web
            Bahan laman web
            Templat hujung hadapan
            Tentang kita Penafian Sitemap
            Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!