尝试将jQuery filter()与数组一起使用

时间:2013-12-31 02:06:43

标签: javascript jquery arrays filter

我有一组复选框,单击时会向数组添加属性。问题是我想通过具有我刚刚添加到该数组的特定属性的链接进行过滤。

所以我有一个可以有[“filter-F_0”,“filter-F_1”]等的数组......现在下面的代码仅在单击一个复选框时才有效,所以我的数组将是[“filter-F_0 ],但是一旦有更多我迷失了。我应该在循环中这样做吗?

var arr = filterArray.join(",")

$(".appLink").filter("[" + arr + "]").css({
                        borderColor : 'red',
                        borderWidth : '1px',
                        borderStyle : 'solid'
                    });

我在下面设置了一个简单的示例,希望能帮助解释我想要做的事情

http://jsfiddle.net/QCeXV/21/

2 个答案:

答案 0 :(得分:1)

看起来您正在寻找基于或条件的过滤器。现在,您要创建一个过滤条件,例如[filter-F_0,filter-F_0],该条件无效,您可能需要[filter-F_0], [filter-F_0]。所以试试

var arr = $.map(filterArray, function (val) {
    return '[' + val + ']'
}).join(",")

答案 1 :(得分:1)

我建议改用:http://blog.stevensanderson.com/2013/12/03/knockout-projections-a-plugin-for-efficient-observable-array-transformations/

它允许您过滤可观察对象,当您更改选择时,它将更新视图。这可能是比自己手动处理它更好的方法。

但只是为了澄清,你使用这样的过滤器:

return this.products().filter(function(product) {
    return product.isSelected();
});

其中this.products()是一个对象数组,你传入的函数从数组中获取一个item(product),并返回true / false,无论它是否包含在filter函数的输出中。你正在做的是在该函数内部循环以查看当前行的filters数组是否具有值。

$ .map()在功能上类似于filter(),如另一个答案所述......