测试函数名称是否包含字符串,如果函数返回可观察到的值

时间:2019-04-12 11:42:20

标签: javascript typescript

我想根据功能名称决定要使用的功能子集中的哪个功能。

例如:

methodArray = [method1() {},
               secondMethod() {},
               thirdMethod() {}]

getTheRightMethod(i: string){
 for (const method of methodArray) {
   if (method.name.includes(i)) {
     return method;
   }
 }
}

getTheRightMethod('second');

在这种情况下,结果应为secondMethod()

其他问题 我的下一个问题是我的函数返回Observables。我想要的是一个指向函数的指针数组。这可能吗?

3 个答案:

答案 0 :(得分:0)

您必须声明命名函数才能起作用:

const methodArray = [function one() { return 1; }, function two() { return 2; }, function three() { return 3; }];

function getRightMethod(str) {
  for (const method of methodArray) {
    if (method.name.includes(str)) {
      return method;
    }
  }
  return null;
}

console.log(getRightMethod('two')());

答案 1 :(得分:0)

以下内容将使它们命名为函数,从而使您的代码正常运行,从而解决了语法错误。

methodArray = [
       function method1() {},
       function secondMethod() {},
       function thirdMethod() {}
]

答案 2 :(得分:0)

您的代码非常接近,只需进行调整:

/* Declare each "method" function in the array */
let methodArray = [
  function method1() {
    alert('first item')
  },
  function secondMethod() {
    alert('second item')
  },
  function thirdMethod() {
    alert('third item')
  }
];

function getTheRightMethod(i) {
  /* Iterate through array searching for first match */
  for (const method of methodArray) {
    /* Add missing ) after includes(i) */
    if (method.name.includes(i)) {
      return method;
    }
  }
}

/* Demonstrate this works by calling returned function */
getTheRightMethod('second')();