FilterBuilder Class
过滤生成器对象;可以使用:条件字符串;参数;方法来构建; 条件字符串的过滤操作见Operations
Defined in:
Module: FilterBuilder
src\dataManager\filterBuilder.js:25
Constructor
FilterBuilder
FilterBuilder
(
-
filter
)
FilterBuilder
Parameters:
name | type | flag | description |
---|---|---|---|
filter
| String | Function | Object | 三种类型:
|
Returns:
[FilterBuilder]
返回过滤生成器对象
Example:
//定义数据
var data = [
{name: "roy",age: 30,role: "sa",project: "smartjs"},
{name: "roy",age: 30,role: "coder",project: "smartdoc"},
{name: "coder1", age: 20, role: "coder", project: "smartjs"}
];
//查询字符串,{age > @age}用{}包含的条件表示当@age为null的时候,忽略此条件
var str = "{age > @age} and (role = @sa or role = @coder) and {project = @project}";
//创建字符串过滤器
var strFilter = st.filterBuilder(str);
//生成过滤方法
var fnFilterCoder = strFilter.buildFn({
coder : 'coder',
});
//过滤所有coder
var coders = data.filter(fnFilterCoder);
expect(coders.length).toBe(2);
expect(coders[0].name).toBe('roy');
expect(coders[1].name).toBe('coder1');
//再次生成smartjs项目年纪大于20的coder或sa
var filterFn = strFilter.buildFn({
age : 20,
coder : 'coder',
sa : 'sa',
project : 'smartjs'
});
var member = data.filter(filterFn);
expect(member.length).toBe(1);
expect(member[0].name).toBe('roy');
//创建过滤器
var paramFilter = st.filterBuilder();
//根据参数创建过滤方法
var filterFn2 = paramFilter.buildFn({
name : 'coder1'
});
var coder1 = data.filter(filterFn2);
expect(coder1.length).toBe(1);
expect(coder1[0].name).toBe('coder1');
Methods
buildCondition
buildCondition
(
-
params
)
Object
生成条件参数,当使用查询字符串进行构建过滤器时,根据传入的参数值生产最终的带关系和操作过滤参数
Parameters:
name | type | flag | description |
---|---|---|---|
params
| Object | 过滤的参数值 |
Returns:
[Object]
条件参数
Example:
var str = "age > @age and (role = @sa or role = @coder) and project = @project";
var filter = st.filterBuilder(str);
//生成条件
var conditions = filter.buildCondition({
age : 20,
sa : 'sa',
coder : 'coder',
project : "smartjs"
})
log(conditions);
// 生成的conditions对象
// {"and":[
// {"field":"age","operation":">","param":20},
// {"or":[
// {"field":"role","operation":"=","param":"sa"},
// {"field":"role","operation":"=","param":"coder"}
// ]},
// {"field":"project","operation":"=","param":"smartjs"}
// ]}
buildFn
buildFn
(
-
[params]
-
[mergeFilter]
)
Function
生成过滤方法
Parameters:
name | type | flag | description |
---|---|---|---|
[params] |
Object | optional | 过滤的参数值 |
[mergeFilter] |
String | Function | Object | optional | 需要合并的过滤条件;合并全部都为and |
Returns:
[Function]
过滤方法
Example:
var data = [
{name : 'sa1', role : 'sa', age : 33},
{name : 'sa2', role : 'sa', age : 25}
];
//创建role的过滤器
var filter = st.filterBuilder("role = @role");
//传入条件参数,并追加age的过滤
var filterFn = filter.buildFn({role:"sa",age:30},"age > @age");
var sa = data.filter(filterFn);
expect(sa.length).toBe(1);
expect(sa[0].name).toBe('sa1')