我在 Angular 8 项目https://ng-bootstrap.github.io/#/components/typeahead/examples 中使用来自 ng-bootstrap 的 typeahead 元素。我正在使用库示例中给出的函数,但如果我的输入之一为空,我会收到错误消息。我的组件类中有一个变量,它是用一个函数构建的:searchAutofill = (text$: Observable<string>) => text$.pipe( debounceTime(200), distinctUntilChanged(), map(term => term.length < 1 ? [] : this.option.filter(v => v.toLowerCase().indexOf(term.toLowerCase()) > -1).slice(0, 15)) )option 是一个字符串数组,例如:[ "tom", "bob", "foo", "emma", null, "john", "hello", "example",当函数达到空值时,它返回ERROR TypeError: "v is null"。如何更改我的代码以接受/忽略空值?
1 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
是的,因为您尝试对 'null' 值执行 String 方法。
所以在这里v.toLowerCase()
你得到null.toLowerCase()
.
每当您访问对象的任何属性或方法时,您必须确保该对象是您期望的对象。否则设置一些规则来检查,
在您的情况下,您似乎想检查字符串中v
是否有保存在term
变量中的子字符串。
所以我猜你想返回false
ifv
是null
:
filter(v => v && v.toLowerCase().indexOf(term.toLowerCase()) > -1)
ps 请注意,这里我只是检查是否v
不是假值。您可能需要添加其他规则来检查它是否是字符串。例如:
typeof v === 'string'
添加回答
举报
0/150
提交
取消