如果选择值为空,我可以神奇地使选择器不起作用吗?

问题描述

背景: 我有一个这样的函数:

hide_modules('string1','string2');

该功能类似于:

function hide_modules(param1,param2) {
       MM.getModules()
         .withClass(param1)
         .exceptWithClass(param2)
         .enumerate(function(module) {
           module.hide(
             // some other code
           );
         });
}

大多数时候,我使用上面显示的值来调用函数。 有时我不希望'string1'具有值,并且我希望我的函数不使用该第一个选择器,实际上是这样的:

   MM.getModules()
     // .withClass(param1)
     .exceptWithClass(param2)
     .enumerate(function(module) {
       module.hide(
         // some other code
       );
     });

我尝试用一​​个空字符串,0,false作为param1来调用它,但是最终结果类的选择不是我想要的。 有时我也用param2为空并且不希望使用与param2相关的选择器来称呼它。

所以问题是: 无需编写大的if-then-else语句,当未指定param1和/或param2值时,是否可以通过某种花哨的方法使这些选择器不起作用(相当于像上面那样注释掉它)?


在我无法更改的第3方库中为我提供了函数调用的支持代码。我在这里包括一些相关的部分,因为它可能有助于答案:

var withClass = function (className) {
    return modulesByClass(className,true);
};
var modulesByClass = function (className,include) {
    var searchClasses = className;
    if (typeof className === "string") {
        searchClasses = className.split(" ");
    }

    var newModules = modules.filter(function (module) {
        var classes = module.data.classes.toLowerCase().split(" ");

        for (var c in searchClasses) {
            var searchClass = searchClasses[c];
            if (classes.indexOf(searchClass.toLowerCase()) !== -1) {
                return include;
            }
        }

        return !include;
    });

解决方法

由于js不支持函数重载,因此唯一的方法是在方法内部验证参数。检查truthy,三元运算符将解决问题

      var modules = MM.getModules();
      modules = param1 ? modules.withClass(param1) : modules;
      modules = param2 ? modules.exceptWithClass(param2) : modules;
      modules.enumerate(function(module) {
      module.hide(
         // some other code
       );
     });

跳过第一个参数

hide_modules(null,'string2');

跳过第二个参数

hide_modules('string1');

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...