javascript - 如何根据变量内容运行相应函数?

php中文网
发布: 2016-12-01 01:27:50
原创
1715人浏览过

我写了几个函数 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 。

立即学习Java免费学习笔记(深入)”;

<code>function fun_abc(x)
{
    var a = funA(x);
    var b = funB(a);
    var c = funC(b);

    var y = c;
    
    return y;
}</code>
登录后复制

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

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

js 或 php 相关语法都可以。

回复内容:

我写了几个函数 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 。

立即学习Java免费学习笔记(深入)”;

<code>function fun_abc(x)
{
    var a = funA(x);
    var b = funB(a);
    var c = funC(b);

    var y = c;
    
    return y;
}</code>
登录后复制

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

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

js 或 php 相关语法都可以。

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

一览运营宝
一览运营宝

一览“运营宝”是一款搭载AIGC的视频创作赋能及变现工具,由深耕视频行业18年的一览科技研发推出。

一览运营宝 41
查看详情 一览运营宝
<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>
登录后复制

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

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

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

  • 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>
登录后复制

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

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

php 版本

<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>
登录后复制

node 版本

<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>
登录后复制

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

<code>    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
}</code>
登录后复制
相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号