如何在不指定过滤器数量的情况下动态声明一组过滤条件?
例如,如果我有一组数据,如下所示:
var data = [
{ item: { type: 'wood', size: 10 } },
{ item: { type: 'wood', size: 8 } },
{ item: { type: 'metal', size: 8 } }
]
Run Code Online (Sandbox Code Playgroud)
我知道我可以用JS .filter()来获取所有具有的项目type wood和size 8:
function filterItems() {
return data.filter(function(val) {
return val['item'].type == 'wood' &&
val['item'].size == 8;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想过滤具有未知数量的过滤器的项目,并.filter()返回data符合这些标准的所有项目,该怎么办?
您可以将一系列条件传递给filterItems()函数.试试这个:
function filterItems(filters) {
return data.filter(function(val) {
for(var i = 0; i < filters.length; i++)
if(val['item'][filters[i][0]] != filters[i][1])
return false;
return true;
}
}
filterItems([['type', 'wood'], ['size', 8], ['someother', 'value']]);
Run Code Online (Sandbox Code Playgroud)
可以以各种格式应用相同的想法,例如使用对象而不是数组来提高可读性.
| 归档时间: |
|
| 查看次数: |
4516 次 |
| 最近记录: |