You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选包含函数的数组,实现输入英雄名匹配调用对应函数

可行解决方案

最优方案:对象映射表(推荐)

这是替代多分支if/else/switch的标准规范写法,查找效率为O(1),无需维护两个分离的数组,也不存在数组顺序不匹配的风险:

const callRobin = () => `Hey Robin`;
const callRaven = () => `Hey Raven`;
const callStarFire = () => `Hey StarFire`;
const callBeastBoy = () => `Hey BeastBoy`;

// 直接建立英雄名与对应调用函数的映射关系
const heroFuncMap = {
  Robin: callRobin,
  Raven: callRaven,
  StarFire: callStarFire,
  BeastBoy: callBeastBoy
}

const myFunc = param => heroFuncMap[param] ? heroFuncMap[param]() : false;

myFunc('StarFire'); // 输出:'Hey StarFire'

后续新增英雄仅需要在heroFuncMap中新增一组键值对即可,维护成本极低。

兼容现有双数组的修正方案

如果你必须保留现有的herosFuncArr和herosStringsArr两个数组,可以修正原有代码的逻辑错误实现需求,你原有代码的问题包括:

  • filter方法返回的是数组,不能直接和字符串类型的参数做相等判断
  • 函数执行的括号位置错误,误写在了includes方法的参数中
    修正后代码:
const callRobin = () => `Hey Robin`;
const callRaven = () => `Hey Raven`;
const callStarFire = () => `Hey StarFire`;
const callBeastBoy = () => `Hey BeastBoy`;

const herosFuncArr = [callRobin, callRaven, callStarFire, callBeastBoy];
const herosStringsArr = ['Robin', 'Raven', 'StarFire', 'BeastBoy'];

const myFunc = param => {
  const heroIndex = herosStringsArr.indexOf(param);
  return heroIndex > -1 ? herosFuncArr[heroIndex]() : false;
}

myFunc('StarFire'); // 输出:'Hey StarFire'

内容的提问来源于stack exchange,提问作者General Louay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:57:00