javascript - 已解决:遍历数组并仅选择第一个值 TS & React
问题描述
试图制作一个动态过滤器,它读取数组并返回一个按钮,然后过滤呈现的数据。我试图让它只显示独特的过滤器,但无法弄清楚如何。我当前的代码:
const typeFilter = data?.venuesByCountry.map(v => (
v.venueTypes.map(a =>(
<>
<Button onClick={() => filterC(`${a}`)}>{a}</Button>
</>
))
))
返回:
["VENUE"]
["RESTAURANT"]
["BAR", "DRINKS", "PUB"]
["BAR", "DRINKS"]
["BAR", "DRINKS"]
但我希望它返回如下内容:
["VENUE"]
["RESTAURANT"]
["BAR"]
["DRINKS"]
["PUB"]
或者:
["VENUE"]
["RESTAURANT"]
["BAR", "DRINKS", "PUB"]
任何帮助将非常感激!
编辑
这是我采用的解决方案:
const typeFilter = data?.venuesByCountry.reduce((acc, item) => {
item.venueTypes.forEach(v => {
(acc.indexOf(v) < 0) ? acc.push(v) : null })
return acc
}, []).map(a => (
<>
<Button $style={{marginRight:'6px'}} onClick={() => filterC(`${a}`)}>{a.toString().replace(/_/g, ' ')}</Button>
</>
))
感谢快速回复
解决方案
你想展平你的阵列,
const newArray = data.venuesByCountry.reduce((acc, item) => {
return acc.concat(item.venueTypes);
}, [])
如果您的数据如下所示,
const venuesByCountry = [
{ venueTypes: [1, 2] },
{ venueTypes: [3, 4] },
]
那么你就会newArray
成为[1,2,3,4]
如果你想让项目独一无二,那么你可以这样做
const venuesByCountry = [
{ venueTypes: [1, 2, 3] },
{ venueTypes: [3, 4] },
]
const newArray = venuesByCountry.reduce((acc, item) => {
item.venueTypes.forEach(v => {
if (acc.indexOf(v) < 0) {
acc.push(v)
}
})
return acc
}, [])
当然,您可以使用许多 Lodash 函数来替换上述内容。
推荐阅读
- nativescript - 扩展中继器(或其他具有嵌套 XML 标记属性的小部件)
- sql - 将 CLOB 数据列转为字符串
- python - 石头、纸、剪刀——错误的结果
- sql - sql查询,字段匹配时按值排序
- css - 使用 font-awsome 作为下拉图标的引导选择库
- c# - How do I add a C# solution file in JetBrains Rider?
- javascript - 格式化对象数组输出
- javascript - Backbone - 聆听 2 个模型的最佳方式是什么?
- git - Git 不断更改文件
- javascript - 如何使用带有锚标记的数组中随机选择的 URL 链接