我有三个网址,我已经拆分为关键字。在JavaScript中,我想看看其中两个Urls是否匹配两个给定的关键字。两个关键字必须匹配两个网址才能继续进行,但我想不出一个简短的方法。
我试过......
if (url1 || url2 || url3 === "keyword1" && "keyword2") {
....
}
和
if (url1 || url2 || url3 === "keyword1" && url1 || url2 || url3 == "keyword2") {
....
}
这是我得到的。问题是,它仅为其中一个关键字返回一个匹配项,而不是仅返回两者的匹配项。我有一种感觉,不排除第一场比赛导致第二场比赛相同的变量。我希望这是有道理的!
有人能帮助我吗?
答案 0 :(得分:2)
||
和&&
是逻辑运算符。你不能将字符串用于他们的操作数(有意义地)。
您必须单独检查每个网址匹配并对结果执行逻辑操作。此外,您应该使用()
来解决运算符优先级问题。
尝试类似:
[url1, url2, url3].indexOf("keyword1") != -1 && [url1, url2, url3].indexOf("keyword2") != -1
答案 1 :(得分:2)
您应该能够使用函数indexOf()
。
array = [url1, url2, url3]
if(array.indexOf("keyword1") >= 0 && array.indexOf("keyword2") >= 0) {
....
}
答案 2 :(得分:1)
这是我能想到的最短路:
switch("keyword1") {
case url1: case url2: case url3:
switch("keyword2") {
case url1: case url2: case url3:
// success! rest of code here
}
}
如果您填充Array.prototype.indexOf,则可以使用:
var urls = [url1,url2,url3];
if( urls.indexOf("keyword1") > -1 && urls.indexOf("keyword2") > -1) {
// ok!
}
答案 3 :(得分:1)
var urls = [url1, url2, url3],
keywords = ["keyword1", "keyword2"],
match1 = 0,
match2 = 0;
for (i=urls.length; i--;) {
if (urls[i].indexOf(keywords[0]) != -1) {
match1 = i;
}else if (urls[i].indexOf(keywords[1]) != -1) {
match2 = i;
}
}
if (match1 && match2) {
//urls[match1] //contains url matched to keyword1
//urls[match2] //contains url matched to keyword2
}
没有array.indexOf
?
答案 4 :(得分:1)
如果将所有网址值合并到一个数组中,则可以使用.indexOf()
(如果浏览器不支持这种相对较新的方法,则该网页包含兼容版本。)
var urls = [url1, url2, url3];
if (urls.indexOf('keyword1') >= 0 && urls.indexOf('keyword2') >= 0) {
// both keywords are in there somewhere
}
答案 5 :(得分:0)
编辑:
完整的解决方案:
var urls = ['http://google.com', 'http://yahoo.com'];
var keywords = ['oo', 'com'];
var matches = [];
var i;
for (i = 0; i < urls.length; i++) {
var j;
var matched = true;
for (j = 0; j < keywords.length; j++) {
matched = matched && urls[i].indexOf(keywords[j]) !== -1;
}
if (matched) {
matches.push(urls[i]);
}
}
匹配数组然后包含与给定关键字匹配的网址
答案 6 :(得分:0)
没有多重匹配的简写,你必须写出条件,并匹配不同的组合:
if (
(url1 === "keyword1" && url2 === "keyword2") ||
(url1 === "keyword1" && url3 === "keyword2") ||
(url2 === "keyword1" && url3 === "keyword2") ||
(url1 === "keyword2" && url2 === "keyword1") ||
(url1 === "keyword2" && url3 === "keyword1") ||
(url2 === "keyword2" && url3 === "keyword1")
) {
...
}