2011-12-09 4 views
2

プラグインを変更しようとしているので、グループ内の「OR」ロジックとグループ間の「AND」ロジックを使用できます。これはworking exampleです。私はそれのためにORロジックを実装する方法tag["One","Two"]を持っている場合はjQueryで "AND"の代わりに "OR"ロジックを実装する方法は?

if ($.inArray(tag, itemTags) > -1) { 
    return true; 
} 

:私のコードは次のようになります。

+0

「OR」または「XOR」? –

+1

あなたは何をしようとしているのか詳しく説明できますか?あなたの質問はあなたの要件を把握するにはあまりにも簡単です。プラグインが何をすべきかの例を提供してください。 – jfriend00

+0

グループ内にORを実装し、グループ間に "And"を実装する必要があります – Imran

答えて

2

I'v e updated your fiddle私はあなたが後にしている機能と思います。

少し前にロジックを移動しました。

1

ブラウザはあなたがarray.filterを提供ターゲットにしている場合、あなたはこのようにそれを行うことができます。

var matchingTags = itemTags.filter(function(el) { 
         return $.inArray(el, tag) > -1; 
        }); 

See it in action

1

ES5の.someメソッドを使用すると、これはかなり簡潔になります。古いブラウザにはa shimがあります。

var tag = ["d", "b"], 
    tagItems = ["a", "b", "c", "d", "e"]; 

var contains = tagItems.some(function(v) { // whether at least "d" or "b" is in `tagItems` 
    return ~tag.indexOf(v); 
}); 

if(contains) { 
    // ... 

このtagItemsのためにこれは以下のように動作します。このため

tag = ["d", "b"];  // contains === true (due to "d") 
tag = ["foo", "x", "a"]; // contains === true (due to "a") 
tag = ["bar"];   // contains === false (due to no matches) 

あなたはまた作ることができるヘルパー関数:

$.inArrayMultiple = function(subset, arr) { 
    return arr.some(function(v) { 
     return ~subset.indexOf(v); 
    }); 
}; 

をそしてあなたが使用することができます。

if($.inArrayMultiple(tag, itemTags)) { 
    // ... 
1

ラウンドアバウトソリューションは、の条件を、$(array).each()関数でラップすることです。反復されたアイテムのいずれかが配列に存在する場合はtrueを返します。

var result = function() 
{ 
    var r = false; 
    $(tag).each(function() 
    { 
     if ($.inArray(this, itemTags) > -1) 
     { 
      r = true; 
     } 
    }); 
    return r; 
} 
関連する問題