我今天在工作中遇到了一种情况,我需要编写我已经编写的函数的逆函数,但是我发现手动编写逆函数效率很低,因为我似乎会重复很多代码,如果我要更新原始函数,我必须用相应的更改来更新逆函数。我正在谈论的功能看起来像这样:
var f = function(id, str) {
  if (id === 0) {
    return str.substring(0, 4) + " " + str.substring(4, 8);
  } else if (id === 1) {
    return str.substring(0, 3) + "/" + str.substring(3, 8);
  } else if (id === 2) {
    return str.substring(0, 4) + "-" + str.substring(4, 8);
  } else if (id == 3) {
    return str.substring(0, 3) + "," + str.substring(3, 8);
  }
}
所以例如f(0, "ABCDEFGH")会返回"ABCD EFGH"。我需要一个反函数,它使用该函数f(id, str)从输出中得出输入。所以finverse(formattedStr)应该返回相应输入的字典。例如,finverse("ABCD EFGH")应该返回{  id: 0, str: "ABCDEFGH" }. 是否可以利用现有函数f来编写这个逆函数,这样即使我要使用额外的“else if”子句更新原始函数,我也不必更新finverse. 换句话说,我不想finverse使用 if 语句手动构造以将输出映射回输入,而是我想以某种方式操纵原始函数以得出逆向函数。这在javascript中可能吗?