使用允许的关键字和搜索值进行筛选的对象搜索



正如我的标题所示,我面临着一个需要解决方案的问题。我正在尝试过滤我的对象,但不仅仅是基于密钥。但也基于允许的密钥的值。

这就是我目前所得到的:

const handleSearch = (searchValue) => {
if(searchValue !== '') {
const allowed = ['name', 'title'];
let list = props.search.list;
const filtered = Object.keys(list)
.filter((key) => allowed.includes(key))
.reduce((obj, key) => {
obj[key] = list[key];
return obj;
}, {});

const filteredArray = Object.entries(filtered)

props.search.onChange(filteredArray)
} else {
props.search.onChange(props.search.list)
}
}

列表对象的结构:

0: {name: "John', title: 'Owner'}
1: {name: "Jane", title: 'Admin'}

想要的结果:

显示已筛选关键字以及搜索值的已筛选数组。

我也不知道我应该在哪里集成这些值的过滤。在过去的几个小时里,这一直让我头疼。希望这里有人对这些问题/逻辑有经验。

感谢阅读。

致以亲切的问候。

const handleSearch = (searchValue) => {
if (searchValue !== '') {
const allowed = ['name', 'title'];
const list = props.search.list;
const filtered = list
.filter(obj =>
Object.keys(obj)
.some(k => allowed.includes(k))
)
.filter(obj =>
Object.values(obj)
.map(v => v.toLocaleLowerCase())
.some(v => v.includes(searchValue.toLowerCase()))
)
props.search.onChange(filtered)
} else {
props.search.onChange(props.search.list)
}
}

示例

假设props为:

const props = {
search: {
list: [
{ name: "John", title: 'Owner' },
{ name: "Jane", title: 'Admin' },
{ name: "Reza", title: 'Owner' }
],
onChange: x => console.log(x)
},
}
handleSearch("own")
// [ { name: 'John', title: 'Owner' }, { name: 'Reza', title: 'Owner' } ]

handleSearch("jane")
// [ { name: 'Jane', title: 'Admin' } ]

handleSearch("something")
// []

最新更新