我想为我的 v-data-table (包含书籍)构建一个自定义过滤器
- 允许通过输入多个空格分隔的搜索词来缩小搜索结果
- 将带有连字符的复合词分成单独的搜索词
- 所有搜索词都应出现在项目中,但它们可以出现在不同的列/道具中,因此搜索“tolkien hobbit”会返回一本标题为“The Hobbit”且作者为“JRR Tolkien”的书
我认为在 customFilter 函数中使用“值”将需要所有搜索词出现在同一个道具中,所以我使用了 item 代替,但是 vuetify 将完整的项目提供给过滤器函数,而不仅仅是数据的可过滤标题表,这将产生不需要的搜索结果,所以我重新初始化该项目以摆脱不需要的道具。
methods: {
customFilter(value, search, item) {
item = {
number: item.number,
title: item.title,
author: item.author
};
const haystack = Object.values(item).join().toLowerCase();
let s = search.toString().toLowerCase();
let needles = s.replace('-',' ').split(' ');
return needles.filter(needle => haystack.indexOf(needle) >= 0).length == needles.length
}
}
我的问题
- 有没有办法告诉 vuetify 只将可过滤的标题道具作为项目提供给自定义过滤器?
- 如果没有,有没有比重新初始化更好的方法来摆脱不需要的道具?(使用扩展运算符进行解构也可以,但会更长,并且 eslint 会唠叨未使用的变量)
- 有没有办法用“价值”而不是“项目”来实现我的要求?(我不明白如何)