我正在尝试修改插件,以便它可以在组内使用“OR”逻辑,并在组之间使用“AND”逻辑。这是working example。我的代码如下:
if ($.inArray(tag, itemTags) > -1) {
return true;
}
如果["One","Two"]
中有tag
如何为其实现OR逻辑。
答案 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;
}