【发布时间】:2020-06-30 13:29:49
【问题描述】:
我有一个数据集,其中每个对象都有一个标题和一个包含多个值的项目数组。我需要能够在保持标题的同时过滤项目。下面的过滤器组件在没有标题的情况下工作。我想要的数据输出是这样的:
如果我过滤“ap...”
输出:
水果
苹果
const FilterList = () => {
const [searchTerm, setSearchTerm] = useState("")
const [searchResults, setSearchResults] = useState([])
const data = [
{
heading: 'fruits',
items: [
{ item: 'apple' },
{ item: 'orange' },
{ item: 'peach' }
]
},
{
heading: 'veggies'
items: [
{ item: 'carrot' },
{ item: 'broccoli' },
{ item: 'spinach' },
]
}
]
const handleChange = e => {
setSearchTerm(e.target.value)
}
useEffect(() => {
let results = []
if (data && Object.prototype.hasOwnProperty.call(data[0], "heading")) {
data.forEach(item => {
results = item.values.filter(value =>
value.value.toLowerCase().includes(searchTerm)
)
})
setSearchResults(results)
}
}, [searchTerm])
return (
<div>
<input
type="text"
placeholder={'placeholder}
value={searchTerm}
onChange={handleChange}
/>
<Typography>
<strong>{heading}</strong>
</Typography>
<List>
{searchResults.map((value, i) => (
<ListItem key={i}>
{value.value}
</ListItem>
))}
</List>
</div>
)
}
【问题讨论】:
-
您还想要多个标题吗?例如,如果有一个以
ap开头的蔬菜......你想要那个标题? -
@iamaatoh 是的 - 两个标题都将显示在各自的过滤项目上方
标签: javascript arrays reactjs filter