JavaScript 数组和循环

标签 javascript

我正在为历史课制作一个模拟审查制度的谷歌。应该发生的情况是用户输入一个术语,脚本将检查它是“被阻止”的术语还是可搜索的术语。如果该术语被阻止,它将导致不同的页面,如果它是可搜索的,它将导致实际页面。但是,在我的代码中,脚本没有拾取被阻止的术语。有什么想法吗?

Javascript:

function searchCensor() 
{
    var keyTerms = document.getElementById("search").value; 
    var blockedTerms = new Array("censorship", "democracy");
    var counter, blocked;
    for(counter = 0; counter < blockedTerms.length; counter++) {
        if(keyTerms == blockedTerms[counter])
            blocked = 1;
        else
            blocked = 0;   
}
    switch(blocked)
    {
    case 1: window.location = "http://andrewgu12.kodingen.com/history/censor.php";
    case 0: window.location = "https://www.google.com/search?q="+keyTerms;
    }   
}

网站:http://andrewgu12.kodingen.com/history/

谢谢!

最佳答案

仔细考虑你的循环:

for(counter = 0; counter < blockedTerms.length; counter++) {
    if(keyTerms == blockedTerms[counter])
        blocked = 1;
    else
        blocked = 0;
}

如果搜索词是“审查制度”,那么第一次循环时会将阻塞设置为 1。但第二次循环时,它将查看“审查制度”并对照“民主”进行检查,然后将阻塞设置为 0。如果最后一个阻塞术语与查询匹配,则这只会有效地将阻塞设置为 1。

您真正想要的是,如果任何阻止的术语与查询匹配,则将阻止设置为 1:

var blocked = 0;
for (var counter = 0; counter < blockedTerms.length; counter++) {
    if(keyTerms == blockedTerms[counter]) {
        blocked = 1;
        break;    // Don't need to continue checking, we know it's blocked
    }
}

请注意,一般来说,如果您使用 truefalse 作为这种标志,而不是数字(什么),它会更有意义(因此更容易阅读)这是否意味着如果被阻止= 3?什么也没有)。代码将变为:

var blocked = false;
for (var counter = 0; counter < blockedTerms.length; counter++) {
    if(keyTerms == blockedTerms[counter]) {
        blocked = true;
        break;    // Don't need to continue checking, we know it's blocked
    }
}

if (blocked) {
    // ...
}
else {
    // ...
}

最后,如果您打算在由多个单词组成的查询中选取经过审查的术语,您可以通过拆分搜索查询,然后检查这些术语中是否有任何术语被阻止(使用嵌套循环)来实现。或者,您可以使用正则表达式并完全消除循环:

var blocked =
    new RegExp('\\b' + blockedTerms.join('\\b|\\b') + '\\b', 'i')
    .test(keyTerms);

关于JavaScript 数组和循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340013/

相关文章:

javascript - 在 Javascript 中格式化响应

javascript - javascript类中的自动增量值

javascript - moment.js 认为 2013-12-31 是第 1 周,而不是第 53 周

javascript - D3 可视化中的错误(堆积面积图)

javascript - 为什么我的虚拟机根目录被设置为 app.__vue__?

javascript - 对象的范围应该是不可见的,但它的出现是如何发生的?

javascript - w3c 标记验证 "Attribute , not allowed"

javascript - 计算 firebase 消息大小

javascript - knockout foreach 动态设置 ID

javascript - 无论您在页面上的什么位置,我如何制作一个保持在固定位置的 div?