const tgtList = [
{
id: 1,
firstName: '太郎',
lastName: '田中',
companyName: '某企画',
email: 'tanaka_taro@boukikaku.com',
status: 1,
},
{
id: 2,
firstName: '太郎',
lastName: '鈴木',
companyName: '某企画',
email: 'suzuki_taro@boukikaku.com',
status: 1,
},
{
id: 3,
firstName: '花子',
lastName: '山田',
companyName: '企画会社',
email: 'yamada@abc.com',
status: 1,
},
]
function getFilterdList({
searchword,
specifiedKeys,
}: {
searchword: string
specifiedKeys?: string[]
}): typeof tgtList {
const defaultKeys = [
'firstName',
'lastName',
'companyName',
'email',
'fullName', // デフォルトでは足す
]
const searchwordList = searchword.trim().split(/\s+/)
const keys = specifiedKeys ? specifiedKeys : defaultKeys
return !searchword.trim()
? tgtList
: tgtList.filter((listItem) => {
const tmpListItemForFiltering: {
[key in string]?: string | number
} = Object.assign(
{},
listItem,
keys.includes('fullName')
? {
fullName: listItem.lastName + listItem.firstName,
}
: {}
)
return searchwordList.every((word) => {
return keys.some((key) => {
const itemVal = tmpListItemForFiltering[key]
return (
itemVal &&
typeof itemVal === 'string' &&
itemVal.includes(word)
)
})
})
})
}