javascript - 将属于同一类别的复选框项目排列在一个部分中
问题描述
根据我的电子商务要求,我有一个由多个复选框组成的过滤器。用户选择一个或多个复选框来过滤表格中的项目列表。
复选框排列看起来像这样(示例):
Mathematics
maths checkbox1
maths checkbox2
maths checkbox3
Physics
phy checkbox1
phy checkbox2
phy checkbox3
选择任何过滤器(复选框)时,过滤器必须显示在组件中,如下所示:
通过一些解决方法,我能够实现包含所选过滤器的单个数组,但不确定如何处理这种将属于同一类别的过滤器分组的特殊方式。
到目前为止尝试过:
initialstate = {
filters: [
{
title: '',
options: [
{
name: '',
key: '',
label: '',
}
],
}
],
selected: []
}
常量 setFilters = (值) => {
setFilterOptions((state) => {
const selectedFilters = state.selected.find(
(obj) => obj === value
);
const selected = selectedFilters
? state.selected.filter(
(obj) => obj !== value
)
: [...state.selected, value];
return {
selected,
filters: [
...state.filters.map((filter) => {
return {
...filter,
options: filter.options.map((ele) => {
return {
...ele,
checked: selected.includes(ele.label)
};
})
};
})
]
};
});
};
我能想到的算法:
- 函数
setFilters(value)
采用label
所选过滤器的 。 - 组件状态:
const [filterOptions, setFilterOptions] = useState(initialState);
- 在这个函数中,循环遍历
state.selected
对象数组并检查属于哪个类别value
。 - 如果该
value
类别不存在,请将其添加一个数组。如果它已经存在(对于同一类别),则将其推送到相应的数组。 - 映射最终数组以呈现过滤器的名称(如图所示)。
我对如何实际实现这个逻辑有点困惑。
需要一点帮助才能以最好的方式实现这一点。
先感谢您。
解决方案
推荐阅读
- python - Python SMTP - 将电子邮件发送给用户后在已发送项目中接收电子邮件
- javascript - 尝试将数组中的任何图像插入到对象中
- c - 在c编程中生成随机数的算术级数
- xml - XSL:使用 tokenize 生成 .dot digraph 连接列表?
- c# - Epplus - LoadFromCollection 和列顺序
- c# - ASP.NET Core 2.1 从类库中引用 ApplicationDbContext
- android - macOS 上的 Android 模拟器文件结构在哪里?
- visual-studio-code - VSCode 颜色主题函数调用
- android - 在 PDA 上执行的颤振应用程序有问题吗?
- javascript - 单击 OpenMCT 的“绘图视图”出现错误