javascript - 如何包含基于条件的参数(在 CoffeeScript/JavaScript 中)?

标签 javascript google-analytics dry coffeescript google-analytics-api

我编写了一个类似于这个人为示例的 CoffeeScript 函数:

my_func = (a, b, use_args = false) ->
  if use_args?
    other_func 'foo', a, b, 'bar'
  else
    other_func 'foo', 'bar'

这会编译成以下 JavaScript:

var my_func;
my_func = function(a, b, use_args) {
  if (use_args == null) {
    use_args = false;
  }
  if (use_args != null) {
    return other_func('foo', a, b, 'bar');
  } else {
    return other_func('foo', 'bar');
  }
};

这个函数是否有一个 DRY 方法可以消除对 other_func 的重复调用?像这样的东西:

my_func = (a, b, use_args = false) ->
  other_func 'foo', a if use_args?, b if use_args?, 'bar'

但这实际上在句法上是正确的吗?希望我没有错过这里明显的东西。我不确定 CoffeeScript 是否提供了一种方便的方法来执行此操作,或者我是否应该使用更好的 JavaScript 模式。

顺便说一句,我无法修改 other_func 以使用不同的参数,因为它实际上是 _gaq.push(),它是 Google Analytics 库的一部分,用于将跟踪信息添加到一个队列。

最佳答案

首先,我认为您原始问题中的代码很好(参数列表中的 = false 除外——请参阅我的评论)。它非常高效且可读。但如果重复真的让您感到困扰,请继续阅读。

Chris 的回答是正确的。由于这是 CoffeeScript,您可以利用一些语法糖:

  • 代替 arr.splice(1, 0, [a, b]),您可以编写 arr[1...1] = [a, b] .

  • 您可以简单地编写 func arr... 而不是 func.apply(null, arr)

因此,将这些结合起来,您可以将函数缩减为 3 条短而无重复的行:

my_func = (a, b, use_args) ->
  args = [foo, bar]
  args[1...1] = [a, b] if use_args
  other_func args...

请注意,您不必执行 use_args? 检查;如果它是 nullundefined,它将被自动(通过 JavaScript)强制为 false if use_args

关于javascript - 如何包含基于条件的参数(在 CoffeeScript/JavaScript 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388435/

相关文章:

google-analytics - 谷歌分析 : Difference between Data Import & Daily upload

css - DRY 与适当的关注点分离

error-handling - NestJS - 如何构建代码以优雅地处理错误?

javascript - 如何将字符串中的数组转换为Javascript上的数组?

javascript - Three.js Lookat() 函数无法按我的需要工作

javascript - 在php中登录后不显示模态框

javascript - 如何在 ASP.NET 请求期间重定向到另一个页面

session - 谁能解释 GA4 中的 session_start 事件计数与 session 指标有何不同?

google-analytics - 分析 API 的每日错误限制何时重置?

javascript - 在 Angular.JS 中查看字段名称和值的更好方法