Фильтрация данных на React
Есть некий массив с данными, которые приходят с сервера, надо выполнить сортировку по состоянию options.
const blocks = [
{
id: 1,
workNumber: 1,
variant: 1,
status: 1,
questions: [''],
likes: 0,
bought: 1,
method: ['excel', 'word']
},
{
id: 2,
workNumber: 2,
variant: 1,
status: 2,
questions: [],
likes: 2,
bought: 2,
method: []
},
{
id: 3,
workNumber: 3,
variant: 2,
status: 3,
questions: [],
likes: 2,
bought: 2,
method: []
},
{
id: 4,
workNumber: 2,
variant: 2,
status: 3,
questions: [],
likes: 2,
bought: 2,
method: []
}
]
const [options, setOptions] = useState({
variant: 0,
workNumber: 0,
status: 0
})
Каким образом можно сделать сортировку сразу по нескольким параметрам, а потом ещё и сброс всех фильтров, или по одному.
Ответы (1 шт):
Автор решения: Donnle
→ Ссылка
Если я правильно понимаю что Вы хотите сделать, то это будет выглядеть так:
const filterBlocks = (options, blocks) => {
const keys = Object.keys(options);
return blocks.filter((block) => {
for (let i = 0; i < keys.length; i++) {
const field = keys[i];
if (options[field] !== block[field]) return false;
}
return true;
});
};
filterBlocks(options, blocks)
а потом ещё и сброс всех фильтров, или по одному.
Вы можете меняя options или blocks вызывать эту функцию.
useEffect(() => {
filterBlocks(options, blocks); // and set this data to another useState
}, [options, blocks]);
UPD: Не совсем удачно назвал аргументы, думаю вы разберетесь