当输入为空时,ngbtypeahead 函数返回 TypeError

我在 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"。如何更改我的代码以接受/忽略空值?


RISEBY
浏览 106回答 1
1回答

拉风的咖菲猫

是的,因为您尝试对 'null' 值执行 String 方法。所以在这里v.toLowerCase()你得到null.toLowerCase().每当您访问对象的任何属性或方法时,您必须确保该对象是您期望的对象。否则设置一些规则来检查,在您的情况下,您似乎想检查字符串中v是否有保存在term变量中的子字符串。所以我猜你想返回falseifv是null:filter(v&nbsp;=>&nbsp;v&nbsp;&&&nbsp;v.toLowerCase().indexOf(term.toLowerCase())&nbsp;>&nbsp;-1)ps 请注意,这里我只是检查是否v不是假值。您可能需要添加其他规则来检查它是否是字符串。例如:typeof&nbsp;v&nbsp;===&nbsp;'string'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript