【发布时间】:2015-05-11 19:26:50
【问题描述】:
我正在使用控制器级别的角度过滤,即filterFilter。我需要实现嵌套过滤,但我不确定如何以最好的方式实现。
我有一组如下所示的对象:
{
"id": "5d004ff4-46a9-47d5-b068-6b9d581bb6fa",
"number": 80501703098,
"firstName": "Loma",
"lastName": "Collins",
"age": 44,
"birthDate": "1980-08-21T12:40:47.026Z",
"address": {
"street": "2209 Hirthe Plains",
"city": "North Heathertown",
"postCode": "24805"
},
"email": {
"home": "Josefa49@yahoo.com",
"work": "Phoebe64@sdc.dk"
},
"phone": {
"mobile": "+82 763 681 802",
"home": "(453) 312 255 267",
"work": "+45 843 108 216"
}
}
我还有一个表单可以接受几个纯文本输入和控制器的代码:
XyzModule.run(['filterFilter', function(filterFilter){
data = ... // above collection
params = ... // data from the form
filtered = filterFilter(data, {
number: params.number,
lastName: params.lastName,
firstName: params.firstName
});
});
// this has been manually transpiled from .coffee
// don't pay attention if there are errors in the syntax
上面的代码可以通过number、lastName和firstName成功找到集合对象——很好。
现在我想通过email 和phone 进行搜索。这里的情况是搜索表单接受纯文本字段:电话和电子邮件一样只是一个字符串。但是集合中的对象具有嵌套的电话和嵌套的电子邮件值。
我想实现过滤数据,当 params.email 是 email.home 或 email.work 时匹配对象。类似地,当 params.phone 是 either phone.mobile OR phone.home OR home.work 时。 params 是搜索表单输入值的映射。
我尝试了类似的方法:
filtered = filterFilter(data, {
phone: params.phone,
email: params.email
});
但它不起作用,可能格式无效。
filtered = filterFilter(data, {
phone: {
home: params.phone,
mobile: params.phone,
work: params.phone
},
email: {
home: params.email,
work: params.email
}
});
也不起作用,因为它应用 AND 而不是 OR 并且对于不同的手机或不同的电子邮件不可能具有相同的值。
【问题讨论】: