如何组合多个返回函数(JavaScript)

时间:2016-06-14 15:48:46

标签: javascript google-tag-manager

我正在学习JavaScript,以便我可以实施Google跟踪代码管理器。我有一个路径列表,我希望GTM重写为更友好的东西,如下:

function() {
      return document.location.pathname.indexOf('/l/138281/2016-06-07/dy383') > -1 ? 'Test Success' : undefined;
    }

function() {
      return document.location.pathname.indexOf('/l/138281/2016-04-03/55z63') > -1 ? 'SPP Contact Success' : undefined;

我只是不确定如何将这些返回组合成一个函数(我目前有大约30个要重写的URL)。我想我可以使用if / else,但建议会非常可爱。

- 编辑 -

URL Path        Rewrite To
/test-638-jsj   /test-success
/spp-zxcv-765   /spp-contact-success
/foo-asdf-123   /foo
/foo-bar-987    /foo-bar

上面提到的返回功能可以很好地为单个链接做到这一点。我只是希望能够在一个函数中重写一系列URL(或者最有意义的是这样做)。希望这有助于澄清。

谢谢!

1 个答案:

答案 0 :(得分:0)

构造代码总是一个好主意:将抽象功能与特定问题分开。

您实际执行的操作是扫描字符串以查找关键字,并在找到关键字时返回特定值。

因此,您需要一个执行上述计算的函数和一个包含关键字及其值(= Object)的JavaScript数据结构:

// Return patterns[key] if any key is found in string, else return string:
function match(string, patterns) {
  for (key of Object.keys(patterns)) {
    if (string.indexOf(key) > -1) return patterns[key];
  }
  return string;
}

var patterns = {
  '/l/138281/2016-06-07/dy383': 'Test Success',
  '/l/138281/2016-04-03/55z63': 'SPP Contact Success'
}

console.log(match('/l/138281/2016-06-07/dy383', patterns)); // "Test Success"
console.log(match('/doesnotexist', patterns)); // "/doesnotexist"
console.log(match(document.location.pathname, patterns));