【问题标题】:Check whether an array includes a string but ignore rest other letters in that string [duplicate]检查数组是否包含字符串但忽略该字符串中的其他字母[重复]
【发布时间】:2019-06-29 00:32:42
【问题描述】:

我有一个变量,例如,

var url = "/login/user";

我有一个类似的数组,

var x = ["login", "resetpassword", "authenticate"];

现在我需要检查 url 字符串是否存在于字符串数组中。正如我们所见,login 存在于一个数组中,但是当我执行 x.indexOf(url) 时,它总是收到 false,因为字段 url 还有其他字母。那么现在如何在检查数组中的字符串并返回 true 时忽略这些字母?

【问题讨论】:

    标签: javascript arrays angular string


    【解决方案1】:

    在数组上使用.some

    var url = "/login/user";
    var x = ["login", "resetpassword", "authenticate"];
    
    if (x.some(str => url.includes(str))) {
      console.log('something in X is included in URL');
    }

    或者,如果您要查找的子字符串始终位于 url 变量的前两个斜杠之间,则先提取该子字符串,然后使用 .includes

    var url = "/login/user";
    var x = ["login", "resetpassword", "authenticate"];
    
    var foundStr = url.split('/')[1];
    
    if (x.includes(foundStr)) {
      console.log('something in X is included in URL');
    }
    【解决方案2】:

    一种方法是使用/ 字符分割网址,而不是使用some

    var url = "/login/user";
    var x = ["login", "resetpassword", "authenticate"];
    
    let urlSplitted = url.split('/')
    
    let op = urlSplitted.some(e=> x.includes(e))
    
    console.log(op)

    【讨论】:

    【解决方案3】:

    您可以用管道(正则表达式中的 as 或运算符)连接给定的单词,生成正则表达式并针对字符串进行测试。

    只要您没有某些具有特殊含义的字符,此方法就可以使用。

    var url = "/login/user",
        x = ["login", "resetpassword", "authenticate"];
    
    console.log(new RegExp(x.join('|')).test(url));

    【讨论】:

    • 导致/login|resetpassword|authenticate/.test("/login/user") - 聪明
    • 注意:在"/logged/authenticateduser"进行身份验证时将返回true
    • 作为其他解决方案。
    • 当然。但你的似乎是最聪明的。欺骗了这个stackoverflow.com/a/5582621/295783
    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2015-07-18
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多