我正在使用Controller级别的角度过滤,即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
进行搜索。这里的情况是搜索表单接受纯文本字段:phone只是一个字符串以及电子邮件。但是集合中的对象具有嵌套电话和嵌套电子邮件值。
我想实现过滤数据,当params.email是email.home或email.work 时,匹配对象。类似地,当params.phone phone.mobile 或 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 ,并且不可能为不同的手机或不同的电子邮件设置相同的值。
答案 0 :(得分:1)
您可以使用$
通配符:
filtered = filterFilter(data, {
phone: {
$: params.phone
},
email: {
$: params.email
}
});