我正在尝试为Angular 2创建一个搜索管道 . 它应该采用嵌套对象并过滤掉与搜索项匹配的对象 . 我有一个基本版本,但我遇到了两个问题 .
问题一,我现在必须硬编码密钥名称或者使用 JSON.stringify
中看起来像脏的黑客 .
过滤对象的更优雅的方法是什么,将术语与任何值匹配,以及 _id
和 url
等硬编码列表?
问题二是,如果字符串 term
包含空格,我想将其拆分并用两个术语过滤 obj
. 我可以使用 terms = term.split(' ');
拆分它 .
但是,如何使用多个术语进行过滤?
我目前的代码:
import {Pipe} from 'angular2/core';
@Pipe({
name: "search"
})
export class SearchPipe{
transform(obj: any, [term]) {
if (obj != null && term) {
return obj.filter( el => {
//var test = JSON.stringify(el);
//return test.toLowerCase().includes(term.toLowerCase()); //trows a compile error but seems to work.
return el.name.toLowerCase().includes(term.toLowerCase()) || el.place.toLowerCase().includes(term.toLowerCase()) || el.title.toLowerCase().includes(term.toLowerCase()) ;
});
} else {
return obj;
}
}
}
预期输入格式:
[
{
"_id": "56ffbe512ba199777d51c6ae",
"picture": "http://placehold.it/36x36",
"name": "Melissa Reeves",
"company": "Orbixtar",
"place": "Greenwich, Belarus",
"title": "voluptate est ipsum",
"location": {
"lat": -78.926961,
"lng": 90.157653
},
"url": "http://lol.lol"
},
{
"_id": "56ffbe5119cf66e94b3800b4",
"picture": "http://placehold.it/36x36",
"name": "Chelsea Lindsay",
"company": "Squish",
"place": "Vowinckel, Belarus",
"title": "anim ea exercitation",
"location": {
"lat": 66.547582,
"lng": 162.720388
},
"url": "http://lol.lol"
}
]
如果该术语是 "term1"
,我希望它返回包含"term1"的对象 .
如果在另一个术语是 "term1 term2 term3"
,我希望它返回包含所有术语但不一定按特定顺序的所有对象 .
作为一个exaple .
术语 "Melissa"
应该返回第一个对象 .
术语 "Melissa Belarus"
也应仅返回第一个对象 . 即使第二个对象与其中一个键匹配 .
1 回答
Try this (未经测试)