Javascript 是否有一种优雅的方法来检查多种情况?

Javascript 是否有一种优雅的方法来检查多种情况?,javascript,php,jquery,drop-down-menu,Javascript,Php,Jquery,Drop Down Menu,我有多个下拉菜单,即零件号、零件类别、品牌和型号。我试图显示我的库存中的车辆零件数量 由于我通过向下拉菜单提供更多值而变得更加具体,因此必须显示较少类型的零件。(有点像过滤) 我试图模仿的一个很好的例子是本网站中的下拉菜单: 是否有更好的方法进行检查(通过所有可能的组合)而不是这样做: //Values from my dropdown menus var carmake= $('#car_make').val(); var carm

我有多个下拉菜单,即零件号、零件类别、品牌和型号。我试图显示我的库存中的车辆零件数量

由于我通过向下拉菜单提供更多值而变得更加具体,因此必须显示较少类型的零件。(有点像过滤)

我试图模仿的一个很好的例子是本网站中的下拉菜单:

是否有更好的方法进行检查(通过所有可能的组合)而不是这样做:

         //Values from my dropdown menus
           var carmake= $('#car_make').val();
           var carmodel= $('#car_model').val();
           var partname= $('#part_name').val();
           var partcategory= $('#part_category').val(); 

           if(carmake==data['carmake'])
           {
           //do something
           }
           else if (carmake==data['carmake'] && partname==data['partname'])
           {
            //do something           
           }
           else if (carmodel==data['carmodel'] && partname==data['partname'])
           {
            //do something           
           }
           else if (carmodel==data['carmodel'] && partname==data['partname'] &&partcategory==data['partcategory'])
           {
            //do something           
           } else if (carmodel==data['carmodel'] && partname==data['partname'] &&partcategory==data['partcategory' &&partname==data['partname'])
           {
            //do something           
           }
           .
           .
           .
           .
           .              

将所有测试值放在一个对象中,该对象的属性名称与
数据中的属性名称相同。然后循环所有属性以查看它们是否都相同:

var search = {
    carmake: $("#car_make").val(),
    carmodel: $("#car_model").val(),
    partname: $("#part_name").val(),
    partcategory: $("#part_category").val()
};

var match = true;
$.each(search, function(prop, value) {
    if (value !== "" && value != data[prop]) { // only compare if the dropdown was selected
        match = false;
        return false; // break out of the loop
    }
});

if (match) {
    // do something
}

第一个
else if
将永远不会执行。只有当
carmake==data['carmake']
为false时,才会执行该命令。但是如果这是错误的,那么
carmake==data['carmake']&&anything
.Nested
if
就是你的朋友@是的,这正是我想要的。如果组合匹配。它应该立即停止检查各种else的条件(如果有)statements@user3659911Barmar的观点是,当第一个
if
为false时,所有
else if
都将始终为false。然后,当第一个
if
为真时,也不会执行
else if
。他们什么也没做。@Spencer Wieczorek哦,我想我明白你的意思了。Sry,因为我的帖子中没有明确说明。@user3659911你尝试的编辑是错误的。不需要从迭代函数返回true
$。each()
将保持循环,除非函数显式返回
false
。谢谢您的回答!我已经在我的源代码中添加了你的代码。当组合为false时,匹配将设置为false。找到组合时,必须将匹配设置回true。为了执行if(match)语句,
match
在循环之前被初始化为
true
。只有当
数据
匹配失败时,才会将其设置为
false
。但您还必须考虑数据匹配成功的时间。如果匹配成功,
匹配
仍将为true,因为没有任何设置将其设置为
false