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

标签 javascript typescript ecmascript-6 filter

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

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

  return results;
}

对于这个例子,我们可以认为 item 并不总是有 description 属性,只是在某些时候。 在这种情况下,函数将失败并出现错误:

ERROR TypeError: Cannot read property 'toLowerCase' of undefined

我们如何才能仍然在数组中搜索并仅在搜索中包含 description 属性(如果它存在)?这在 .filter() 函数中是否可行?

最佳答案

您可以采用默认值。

要么直接

(item.description || '').toLowerCase().includes(searchQuery)

或者使用默认值进行解构。

results = myArray.filter(({ title = '', description = '' }) => 
    title.toLowerCase().includes(searchQuery) ||
    description.toLowerCase().includes(searchQuery)
);

关于javascript - 我们可以将 .filter() 函数与搜索属性的条件规则一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55003714/

相关文章:

javascript - 窗口 :beforeunload works on chrome browser but not chrome mobile browser. Angular 6

javascript - 如何将 Map 键转换为数组?

javascript - 使用 ES6 在 React 中将一个函数传递给多个子组件

typescript - 如何在 Zod 中创建多级菜单架构

angular - Typescript 中的 "Computed"属性

typescript - 如何在不修改原始框架的情况下扩展外部框架的 d.ts (jQuery)?

javascript - val?.toLocaleString() 和使用 if 语句检查 undefined 有什么区别

javascript - jquery 对所有输入文本进行模糊验证

javascript - 组合数组和对象解构

javascript - Vue3+Vite : error handling in production