首页 > 解决方案 > 检查 url 是否包含列入黑名单的字符串 javascript

问题描述

如果我有一个像这样的黑名单单词数组:

banLinks = ["hello.com","test.net","this.com"];

我想检查一下myLink我通过的是否a.getAttribute("href")包含其中一个词,最好的方法是什么?现在我正在尝试这个,但它不起作用:

            for (let i = 0; i < banLinks.length; ++i) {
                if ( myLink.indexOf(banLinks[i]) <= -1 ){
                    urllink = myLink;
                }
            }

完整部分:

    var urllink;
    const banLinks = ["hello.com","test.net","this.com"];
    for (let j = 0; j < titlesArray.length; ++j) {
        if ( "some logic not important" ){

            for (let i = 0; i < banLinks.length; ++i) {
                if ( titlesArray[j].link.indexOf(banLinks[i]) <= -1 ){
                    urllink = titlesArray[j].link;
                }
            }

        }
    };

标签: javascriptarraysfor-loopincludeindexof

解决方案


您是否处于无法使用的情况Array.prototype.findIndex?(即你必须支持IE)

如果不:

const banLinks = ["hello.com","test.net","this.com"];
const is_banned = banLinks.findIndex(bl => myLink.indexOf(bl) > -1) > -1

并使用您编辑的示例:

const banLinks = ["hello.com","test.net","this.com"];
// is_banned is now a function that ingests a link.
const is_banned = (myLink) => banLinks.findIndex(bl => myLink.indexOf(bl) > -1) > -1
// Get first link from titlesArray that is not banned.
const urllink = titlesArray.map(t => t.link).find(li => is_banned(li) == false)

尽管这都是基于您提供的代码的猜测。您在 for 循环中尝试做什么还不是很清楚。如果要找到第一个有效的(即未禁止)urllink,则应该break在找到它之后。否则,urllink来自其余部分的后续有效 stitlesArray将覆盖早期的。


推荐阅读