我有一组嵌套对象,我有一个用户,它搜索一个房间 这是一个对象数组。
我想在用户输入内容后立即过滤数组
我尝试了很多功能,但没有什么对我有用,这是最后一个例子,它失败了
search(val: any) {
// if input is clear - show everything, what we have
if (val === '') {
this.roomList = this.roomList;
} else {
//choose the object (objects) where rName = val
this.roomList = this.roomList.staticData.rName.filter(function(o) {
return Object.keys(o).some(function(k) {
return o[k].toString().toLowerCase().indexOf(val) != -1;
})
});
}
}
你能帮忙或给我一个暗示吗?
答案 0 :(得分:3)
您需要在Array.filter()
而不是roomList
符合
staticData
this.roomList = this.roomList.filter(function (r) {
return r.staticData.rName.toLowerCase().indexOf(val.toLowerCase()) != -1
});
答案 1 :(得分:1)
this.roomList = this.roomList.staticData.rName
这是一个错误的起点,只需看看它。然后,rName
不是数组,因此您无法在其上调用.filter
。
以下是如何操作:
this.roomListFiltered = this.roomList.filter(o => new RegExp(val,"i").test(o.staticData.rName) )
new RegExp(val,"i")
执行不区分大小写的匹配。
此外,将过滤器的结果存储在另一个变量中,否则您将在过滤掉原始列表时丢失。