请问怎么把如下代码简化成一个函数?filter()中有多个“或”关系的内容相似的条件

请问怎么把如下代码简化成一个函数?filter()中有多个“或”关系的内容相似的条件

问题描述:

请问怎么把如下代码简化成一个函数?
根据输入的 search 的值,将符合条件的内容从 list 中筛选出来。
我写了如下的代码,但是相似内容太多,只有 data 的属性名和条件数量会变动。

list.filter(
  data => !search ||
 (
    data.a.toLowerCase().includes(search.toLowerCase()) ||
    data.b.toLowerCase().includes(search.toLowerCase()) ||
    data.c.toLowerCase().includes(search.toLowerCase()) ||
    ...
    data.z.toLowerCase().includes(search.toLowerCase())
  )
)

遂想简化成一个函数,我想的是这样:定义一个函数 searchKeyFilter(),传入 list 和 search, 然后把需要用到的属性名放在数组里传进去。

searchKeyFilter(list,search,['a','b','c'])
↓↓↓
searchKeyFilter(list, key, arr) {
  if (key=== '') {
    return list
  } else {
    return list.filter(data => data[arr?].toLowerCase().includes(key.toLowerCase()))
  }
}

但奈何学艺不精,在使用 list.filter() 的时候实在不知道如何处理属性名数组才能实现上面的那种效果,某度也没搜到相似内容,真心求解。

筛选出搜索的内容?

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    const list = [
      { id: 1, name: '张三' },
      { id: 2, name: '李四' },
      { id: 3, name: '王五' }
    ]
    const search = [1, 3]

    function searchFilter(list, search) {
      if (search && search.length) {
        return list.filter(item => search.includes(item.id))
      } else {
        return list
      }
    }
    console.log(searchFilter(list, search))

  </script>
</body>
</html>