如何在jQuery中实现“OR”逻辑而不是“AND”?

时间:2011-12-09 17:17:19

标签: javascript jquery filter

我正在尝试修改插件,以便它可以在组内使用“OR”逻辑,并在组之间使用“AND”逻辑。这是working example。我的代码如下:

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

如果["One","Two"]中有tag如何为其实现OR逻辑。

4 个答案:

答案 0 :(得分:2)

updated your fiddle我认为你正在使用的功能。

我只是略微移动了逻辑。

答案 1 :(得分:1)

如果您定位的浏览器提供array.filter,您可以这样做:

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

<强> See it in action

答案 2 :(得分: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)) {
    // ...

答案 3 :(得分:1)

一个迂回解决方案是将inArray条件包装在$(array).each()函数中,如果数组中存在任何迭代项,则返回true。

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