我正试图修改一个插件,以便它可以与组内的"OR"逻辑和组之间的" and "逻辑一起工作。这是一个很好的例子。我的代码看起来像:
if ($.inArray(tag, itemTags) > -1) {
return true;
}
如果我在tag
中有["One","Two"]
如何实现它的OR逻辑。
我已经更新了你的小提琴,我认为这是你所需要的功能。
我只是稍微移动了一下逻辑。
如果您的目标浏览器提供array.filter
,您可以这样做:
var matchingTags = itemTags.filter(function(el) {
return $.inArray(el, tag) > -1;
});
查看效果
使用ES5的.some
方法,这可以相当简洁。
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)) {
// ...
一个迂回的解决方案是将inArray
条件包装在$(array).each()
函数中,如果数组中存在任何迭代项,则返回true。
var result = function ()
{
var r = false;
$(tag).each(function()
{
if ($.inArray(this, itemTags) > -1)
{
r = true;
}
});
return r;
}