过滤嵌套对象的数组

时间:2018-01-19 10:50:53

标签: javascript arrays

我有一组嵌套对象,我有一个用户,它搜索一个房间 这是一个对象数组。

enter image description here

我想在用户输入内容后立即过滤数组

我尝试了很多功能,但没有什么对我有用,这是最后一个例子,它失败了

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;
        })
      });
    }
  } 

你能帮忙或给我一个暗示吗?

2 个答案:

答案 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")执行不区分大小写的匹配。

此外,将过滤器的结果存储在另一个变量中,否则您将在过滤掉原始列表时丢失。