我已经在这里阅读了几个问题,但似乎无法找到我正在寻找的内容。基本上,我需要知道数组中存在的任何元素是否存在于字符串中。一个例子:
var currentHref = "http://www.vorcu.com/hello";
var urls = [
"vorcu.com",
"neutronico.com",
"word2.com"
];
所以,我需要知道“urls”中的任何元素是否与“currentHref”中的任何文本一致。有什么想法吗?
谢谢!
答案 0 :(得分:2)
循环遍历数组并使用搜索:
str.search(arrItem)
将返回匹配的位置,如果未找到则返回-1。
答案 1 :(得分: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"]
答案 2 :(得分:1)
每个人都在提供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
中的任何项匹配。
答案 3 :(得分:0)
以下功能应该有效:
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);
答案 4 :(得分:0)
您可以使用许多浏览器支持的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文章提供了一个可以使用的实现。
答案 5 :(得分:-1)
制作一个foreach,然后检查indexOf;)