【问题标题】:Filter throws - Cannot read property 'toLowerCase' of null过滤器抛出 - 无法读取 null 的属性“toLowerCase”
【发布时间】:2019-08-16 18:23:45
【问题描述】:

我正在尝试根据缓存的查询结果过滤给定的输入。由于我再次过滤用户输入值和数据库,我将它们转换为小写并检查

result =  this.cachedResults.filter(f => f.prj.toLowerCase().indexOf((this.sV).toLowerCase()) !== -1);

在 cachedResult 在该字段中没有 NULL 之前它工作正常。但是如果有 NULL 我怎么能在这里逃脱该记录。

【问题讨论】:

  • 错误是抱怨f.prj.toLowerCase() 还是(this.sV).toLowerCase()
  • @rickdenhaan f.prj.toLowerCase() 因为 f.prj 有时包含 NULL 值

标签: javascript angular typescript angular7


【解决方案1】:

如果f.prjNULL,那么它不能包含this.sV,因此应该过滤掉特定的f,对吗?在这种情况下:

result = this.cachedResults.filter(f => f.prj && f.prj.toLowerCase().indexOf((this.sV).toLowerCase()) !== -1);

【讨论】:

    【解决方案2】:

    在使用toLowerCase() 之前,您必须检查属性prj 是否存在于您的对象中。

    result =  this.cachedResults.filter(f => {
      return f.prj ? (f.prj.toLowerCase().indexOf((this.sV).toLowerCase()) !== -1) : false
    });
    

    这对你有用吗?

    如果问题是 (this.sV) 不存在,那么您也必须检查它。

    【讨论】:

      【解决方案3】:

      您可以执行以下操作来捕获f.prj 中的空值:

      result =  this.cachedResults.filter(f => { 
          if (!f.prj) {
              return false; // Or return true, if you want
          }
          return f.prj.toLowerCase().indexOf((this.sV).toLowerCase()) !== -1);
      });
      

      【讨论】:

        猜你喜欢
        • 2016-05-22
        • 1970-01-01
        • 2021-01-03
        • 2017-10-29
        • 2023-03-20
        • 2019-02-02
        • 2021-11-28
        • 2020-02-12
        • 1970-01-01
        相关资源
        最近更新 更多