多个if和or条件

Multiple if and or conditions

本文关键字:条件 or if 多个      更新时间:2023-09-26

我目前正在尝试在JavaScript中创建一个过滤器功能,允许您从预定义的列表中进行选择,以缩小所选选项。

过滤器有多个选项,根据过滤器中的匹配项缩小列表很简单,一次一个选项。但是如果选择了多个选项,我想根据匹配缩小列表。

示例:用户输入"Hello"作为关键字"Company"的筛选选项,这将导致选择只匹配Company == Hello。如果用户选择了第二个选项,"Good day"作为键"Position",那么我只希望在键"Company"answers"Position"匹配的情况下缩小列表。

没有实际编写任何代码,然后我知道这可以用很多AND或来完成,但我希望有一个更方便的方法来做到这一点,我没有看到。

var position    = $('select[name=order_position]').select2('val');
var industry    = $('select[name=order_industry]').select2('val');
var company     = $('select[name=order_company]').select2('val');
$('.mail_select_prospect').each(function() {
    var prospect_existing = $(this).attr('data-existing');
    var prospect_position = $(this).attr('data-position');
    var prospect_industry = $(this).attr('data-industry');
    var prospect_company = $(this).attr('data-company');
    var self = $(this);
    if(
        ( $.inArray( prospect_position, position ) !== -1 ) ||
        ( $.inArray( prospect_industry, industry ) !== -1 ) ||
        ( $.inArray( prospect_company, company ) !== -1 ) ||
        ( $( 'input[name=order_existing]' ).is( ':checked' ) && prospect_existing == 1 ) ||
        ( $( 'input[name=order_nonexisting]' ).is( ':checked' ) && prospect_existing == 2 )
    ) {
        self.prop('checked', true);
    } else {
        self.prop('checked', false);
    }
});

这是我目前所拥有的,这是基于一个键匹配找到匹配,而我只想要匹配所有过滤器选择的结果。不只是一个。

使用,,整个方式将迫使用户在过滤器启动之前选择每个过滤器选项上的内容(显然),我希望可以选择一个关键字并与具有该关键字的人进行匹配,或者如果选择了两个关键字,我只希望匹配两个关键字。

任何建议吗?

我建议使用条件三元运算符。如果定义了过滤条件,则使用它;否则,该标准的检查应该总是通过。一个简单的例子可以是

if (
    ( position && position.length ? $.inArray( prospect_position, position ) !== -1 : true )
    && ( industry && industry.length ? $.inArray( prospect_industry, industry ) !== -1 : true )
    && ( $( 'input[name=order_existing]' ).is( ':checked' ) ?prospect_existing == 1 : true)
) {
    ...
}

此外,由于您在当前示例代码中只是基于此条件检查设置值true或false,因此您可以直接分配过滤结果(或为了清晰起见使用临时变量),

var include = ( position && position.length ? $.inArray( prospect_position, position ) !== -1 : true ) &&  ... ;
self.prop('checked', include);