我们可以将.filter()函数与条件规则一起用于搜索到的属性吗?

Vas*_*its 2 javascript filter typescript ecmascript-6

假设我们具有以下.filter函数:

search(searchQuery: string) {
  let results = myArray.filter(item => 
    item.title.toLowerCase().includes(searchQuery) ||
    item.description.toLowerCase().includes(searchQuery)
  );

  return results;
}
Run Code Online (Sandbox Code Playgroud)

对于此示例,我们可以考虑item并非description总是具有属性,而是仅在某些情况下具有。在这种情况下,函数将失败并显示错误:

错误TypeError:无法读取未定义的属性'toLowerCase'

我们如何仍可以在数组中搜索,并description仅在属性存在的情况下才将其包括在搜索中?.filter()函数中有可能吗?

Nin*_*olz 5

您可以采用默认值。

要么直接

(item.description || '').toLowerCase().includes(searchQuery)
Run Code Online (Sandbox Code Playgroud)

或采用默认值进行销毁。

results = myArray.filter(({ title = '', description = '' }) => 
    title.toLowerCase().includes(searchQuery) ||
    description.toLowerCase().includes(searchQuery)
);
Run Code Online (Sandbox Code Playgroud)