【问题标题】:How to check if an element of an array is present in a string如何检查数组的元素是否存在于字符串中
【发布时间】:2013-10-31 23:06:03
【问题描述】:

我已经在这里阅读了一些问题,但似乎无法准确找到我正在寻找的内容。基本上,我需要知道数组中存在的任何元素是否存在于字符串中。一个例子:

var currentHref = "http://www.vorcu.com/hello";
var urls = [ 
    "vorcu.com",
    "neutronico.com",
    "word2.com"
       ];

所以,我需要知道“urls”中的任何元素是否与“currentHref”中存在的任何文本一致。有什么想法吗?

谢谢!

【问题讨论】:

  • 让我向您介绍for loop。 :)
  • 您将不得不遍历数组。听起来可能很难看,但如果有其他方法,我会(高兴地)感到惊讶

标签: javascript jquery arrays string


【解决方案1】:

遍历数组并使用搜索:

str.search(arrItem)

将返回匹配的位置,如果没有找到则返回-1。

【讨论】:

  • indexOf 更好,除非你使用正则表达式
【解决方案2】:

类似这样的:

for (var i = 0; i < urls.length; i++) {
    if (currentHref.indexOf(urls[i]) != -1) {
        alert(urls[i]); // found occurence, break or continue
    }
}

或者RegExp方式(以上方式优先):

var isInArray = RegExp(urls.join('|')).test(currentHref); // true|false

var matches = currentHref.match(urls.join('|')); // array of matches ["vorcu.com"]

【讨论】:

  • 别忘了转义你的正则表达式...new RegExp(urls.join('|').replace(/[\.\^$*+?()[{\\]/g,'\\$&amp;'),'g').test(currentHref)
  • @zamnuts 首选for-way 的另一个原因:)
【解决方案3】:

每个人都在提供 Javascript 答案(我完全支持),但仅仅因为你提到 jQuery,我想我会提供一个替代方案:

var curHref = window.location.hostname.split('.'),
    // i imagine your static string was just for test purposes
    checkHref = curHref[1]+'.'+curHref[2],
    urls = [ 
        "vorcu.com",
        "neutronico.com",
        "word2.com"
    ];

if($.inArray(checkHref,urls) > -1){
    // its in there, do your magic
}

这将创建我假设您想要检查的对象(主机名减去 www),以及它是否与使用 jQuery inArray 方法的 urls 中的任何项目匹配。

【讨论】:

  • 工作就像一个魅力!谢谢!
【解决方案4】:

类似下面的函数应该可以工作:

function containsAny(str, arr) {
    for (var i = 0; i < arr.length; i++) {
        if (str.indexOf(arr[i]) !== -1) {
            return true;
        }
    }
    return false;
}

或者你可以使用更慢但更简洁的:

RegExp(arr.join('|')).exec(str);

【讨论】:

    【解决方案5】:

    您可以使用some 方法,许多浏览器都支持该方法:

    var currentHref = "http://www.vorcu.com/hello";
    var urls = [ 
        "vorcu.com",
        "neutronico.com",
        "word2.com"
           ];
    var containsAny = urls.some(function(x) { return currentHref.indexOf(x) >= 0; });
    

    为了与不支持 some 的浏览器兼容,我链接的 MDN 文章提供了一个您可以使用的实现。

    【讨论】:

      【解决方案6】:

      创建一个 foreach 然后检查 indexOf ;)

      【讨论】:

      • JavaScript 中没有 foreach。
      • @undefined 从技术上讲是的,Array.forEach,虽然这不是这个用例的最佳选择
      猜你喜欢
      • 2020-11-12
      • 1970-01-01
      • 2022-07-30
      • 2019-10-22
      • 2019-08-06
      • 1970-01-01
      • 2014-09-24
      • 2013-10-03
      • 2021-10-03
      相关资源
      最近更新 更多