请问怎么把如下代码简化成一个函数?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>