如果多个条件中的三个匹配

时间:2018-06-02 07:51:42

标签: javascript conditional-statements

我通过尝试构建纯JavaScript搜索引擎来学习JavaScript。现在相当不错。但我还是希望它能够成功。我想要修改的部分代码如下:

for (i = 0; i < t.length; i++){
if (
t[i].toUpperCase().indexOf(k[0]) > -1
&&
t[i].toUpperCase().indexOf(k[1]) > -1
&&
t[i].toUpperCase().indexOf(k[2]) > -1
&&
t[i].toUpperCase().indexOf(k[3]) > -1
&&
t[i].toUpperCase().indexOf(k[4]) > -1
&&
t[i].toUpperCase().indexOf(k[5]) > -1
&&
t[i].toUpperCase().indexOf(k[6]) > -1
&&
t[i].toUpperCase().indexOf(k[7]) > -1
)
{code to execute here}
}

其中k是用户搜索的spitted查询字符串:

var q = decodeURI(window.location.href.replace(/(^.+html\?|^.+html)/,'').replace(/\+/g,' ')).trim().replace(/\s/g,'+');
var k = q.split("+");

<form onsubmit="ah1(); return false;">
<input id="in1" type="text" maxlength="255" placeholder="Words to search" value="" />
<input type="submit" value="" />
</form>

<script>function ah1(){
window.location.href = "search.html?" + document.getElementById("in1").value.trim().replace(/\s/g,"+");}</script>

t是要搜索的数据,存储在数组中的外部JS文件中:

var t = ['some words','some other words','etc'];

现在我想修改上面的条件,以便代替所有七个过滤器,如果它们中至少有三个匹配,则返回true。 我是否必须逐个设置它们如下所示

else{if (
t[i].toUpperCase().indexOf(k[0]) > -1
&&
t[i].toUpperCase().indexOf(k[1]) > -1
&&
t[i].toUpperCase().indexOf(k[2]) > -1
)
{code to execute here}
}

任何想法都可以通过尽可能短的代码来实现它。

2 个答案:

答案 0 :(得分:0)

算一下

循环遍历.indexOf(k [ 某些 ])变量并计算其中有多少符合您的条件。

之后,将计数与三个进行比较。

答案 1 :(得分:0)

您可以使用变量作为最小计数,使用一个作为找到的单词。然后检查找到的单词coiunt是否等于想要的计数并返回短语。

&#13;
&#13;
var t = ['one two three four five six', 'one two three four five', 'one two three four', 'one two three', 'one two'],
    k = ['one', 'three', 'four', 'five'],
    min = 3,
    result = t.filter(phrase => {
        var count = 0;
        return k.some(word => phrase.includes(word) && ++count === min);
    });

console.log(result);
&#13;
&#13;
&#13;