我通过尝试构建纯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}
}
任何想法都可以通过尽可能短的代码来实现它。
答案 0 :(得分:0)
循环遍历.indexOf(k [ 某些 ])变量并计算其中有多少符合您的条件。
之后,将计数与三个进行比较。
答案 1 :(得分:0)
您可以使用变量作为最小计数,使用一个作为找到的单词。然后检查找到的单词coiunt是否等于想要的计数并返回短语。
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;