我正在使用Array.prototype.filter从Object name数组中搜索名字。我想修改我的搜索以搜索名字,如果不是,那么搜索姓氏。
student_name : any = [{name:"Udhay" , lname:"Ravi"},
{name:"Sabari" , lname:"Raj"},
{name:"Sachin" , lname:"Karthi"},
{name:"Sudha" , lname:"Mohan"}]
search(){
var this.myInput = "Ravi"
this.student_name = this.student_name.filter((sn) => {
return(sn.name.toLowerCase().indexOf(this.myInput.toLowerCase())> -1)
})
}
有人可以帮我解决这个问题。我是TypeScript和Angular 2的新手
答案 0 :(得分:1)
看起来像这样:
search() {
this.myInput = "Ravi";
// Convert it to lower case here to avoid lower case conversion twice inside filter.
let searchFilter = this.myInput.toLowerCase();
this.student_name =
this.student_name.filter(sn =>
sn.name.toLowerCase() === searchFilter ||
sn.lname.toLowerCase() === searchFilter);
}
filter
函数会对每个元素执行比较,这就是为什么不需要使用indexOf
的原因。它就像在初始数组中的每个元素上执行for
循环,并在新数组中推送满足条件的元素,这些元素稍后将作为filter
函数的结果返回。
修改强>
检查搜索字符串是否有任何名称或姓氏starts with
:
sn.name.toLowerCase().startsWith(searchFilter) ||
sn.lname.toLowerCase().startsWith(searchFilter)
检查搜索字符串是否有任何名称或姓氏contains
:
sn.name.toLowerCase().includes(searchFilter) ||
sn.lname.toLowerCase().includes(searchFilter)
答案 1 :(得分:0)
使用lodash
可以轻松实现search(){
this.myInput = "Ravi"
this.result= _.filter(this.student_name, {'name':this.myInput});
if(_.isEmpty(this.result)){
this.result=_.filter(this.student_name, {'lname':this.myInput})
}
}
<强> LIVE DEMO 强>
答案 2 :(得分:0)
我写了一个非常简单的库ss-search。
对于您的情况,要搜索嵌套数组,请执行以下操作:
UPDATE Dayfile AS d
JOIN (
SELECT DATE(LogDateTime) AS date, MAX(FeelsLike) AS feels
FROM Monthly
GROUP BY date
) AS m ON DATE(d.LogDate) = m.date
SET d.MaxFeelsLike = m.feels
这将过滤出数据,以仅返回名称或姓氏属性中包含“ Ravi”的结果。