3

キーワードに分割した 3 つの URL があります。JavaScript では、これらの Url の 2 つが 2 つの指定されたキーワードに一致するかどうかを確認したいと考えています。コードを続行するには、両方のキーワードが 2 つの URL と一致する必要がありますが、それを行う簡単な方法は思いつきません。

私が試してみました...

if (url1 || url2 || url3 === "keyword1" && "keyword2") {
....
}

if (url1 || url2 || url3 === "keyword1" && url1 || url2 || url3 == "keyword2") {
    ....
    }

これは私が得た限りです。問題は、両方のキーワードの一致のみを返すのではなく、一方のキーワードのみの一致を返すことです。最初の一致を除外しないと、2 番目の一致が同じ変数に一致するように感じます。これが理にかなっていることを願っています!

誰でも私を助けることができますか?

4

7 に答える 7

2

||および&&は論理演算子です。オペランドに文字列を使用することはできません(意味があります)。

すべての URL の一致を個別にチェックし、結果に対して論理演算を実行する必要があります。また、()演算子の優先順位を台無しにしないために使用する必要があります。

次のようなものを試してください:

[url1, url2, url3].indexOf("keyword1") != -1 && [url1, url2, url3].indexOf("keyword2") != -1
于 2012-12-10T17:38:10.310 に答える
2

機能を使用できるはずですindexOf()

array = [url1, url2, url3]
if(array.indexOf("keyword1") >= 0 && array.indexOf("keyword2") >= 0) {
    ....
}
于 2012-12-10T17:45:31.260 に答える
1

すべてのURL値を1つの配列に結合すると、使用できます.indexOf()(ブラウザーがこの比較的新しい方法をサポートしていない場合、ページには互換性のあるバージョンが含まれます)。

var urls = [url1, url2, url3];

if (urls.indexOf('keyword1') >= 0 && urls.indexOf('keyword2') >= 0) {
    // both keywords are in there somewhere
}
于 2012-12-10T17:41:02.973 に答える
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

于 2012-12-10T17:40:00.273 に答える
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!
}
于 2012-12-10T17:39:27.127 に答える
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]);
    }
}

一致する配列には、指定されたキーワードに一致する URL が含まれます

于 2012-12-10T17:40:16.193 に答える
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")
) {
  ...
}
于 2012-12-10T17:49:32.747 に答える