Javascript 多个if和or条件

Javascript 多个if和or条件,javascript,Javascript,我目前正在尝试用JavaScript制作一个过滤器功能,允许您从预定义列表中进行选择,以缩小所选选项的范围 过滤器有多个选项,非常简单,可以根据过滤器中的匹配项缩小列表,每次一个选项。但是如果选择了多个选项,我想根据匹配项缩小列表的范围 示例:用户输入“Hello”作为键“Company”的筛选选项,这将导致选择仅匹配Company==Hello。如果用户选择第二个选项“Good day”作为键“Position”,那么我只想在键“Company”和“Position”匹配时缩小列表范围 在没有

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

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

示例:用户输入“Hello”作为键“Company”的筛选选项,这将导致选择仅匹配Company==Hello。如果用户选择第二个选项“Good day”作为键“Position”,那么我只想在键“Company”和“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,因此您可以直接分配筛选结果(或使用一个临时变量以清晰显示)


当然这是可能的,但我们需要知道在什么情况下才能帮助你。如果您正在基于输入值生成一个事物列表,那么您只能在选择了一个值的情况下生成每个零件,因此选择的值越多,生成的零件就越多。你能发布更多的代码吗?这几乎有效。但是我只有在prospect_existing为true时才会得到结果。好吧,首先我在示例代码中犯了一个错误,我将.is(':checked')条件和prospect_existing==1比较颠倒了。在你发表评论之前,我已经纠正了这个问题,可能是你抄袭了这个错误。太棒了!真是太棒了<代码>?prospect\u existing==1?应该是
?prospect\u existing==1:
,但除此之外,它是完美的。
var include = ( position && position.length ? $.inArray( prospect_position, position ) !== -1 : true ) &&  ... ;
self.prop('checked', include);