【发布时间】:2019-10-17 17:51:11
【问题描述】:
我在一行中有 4 个下拉多选过滤器。
需要在每个选定的选项上渲染和。 我需要在新数组中添加该选定选项并更新当前数组 -> object.property.selected = false/true。
我正在搜索对象数组,每个对象的一个属性都有对象数组。
您可以在此代码笔上找到代码示例:https://codepen.io/nikolatrajkovicits/pen/JqpWOX?editors=0012
这是该数组的外观:
export const getFiltersList = () => [
{
title: 'Taxonomy',
options: [
{
id: 0,
name: 'Competitions',
selected: false,
key: 'Taxonomy'
},
{
id: 1,
name: 'Events',
selected: false,
key: 'Taxonomy'
},
{
id: 2,
name: 'Data',
selected: false,
key: 'Taxonomy'
},
{
id: 3,
name: 'Organisations',
selected: false,
key: 'Taxonomy'
},
{
id: 4,
name: 'Players',
selected: false,
key: 'Taxonomy'
},
{
id: 5,
name: 'Teams',
selected: false,
key: 'Taxonomy'
}
]
},
{
title: 'Source',
options: [
{
id: 0,
name: 'Facebook',
selected: false,
key: 'Source'
},
{
id: 1,
name: 'Twitter',
selected: false,
key: 'Source'
},
{
id: 2,
name: 'Instagram',
selected: false,
key: 'Source'
},
{
id: 3,
name: 'Websites',
selected: false,
key: 'Source'
}
]
},
{
title: 'Timeframe',
options: [
{
id: 0,
name: 'Past hour',
selected: false,
key: 'Timeframe'
},
{
id: 1,
name: 'Past 24 hours',
selected: false,
key: 'Timeframe'
},
{
id: 2,
name: 'Past week',
selected: false,
key: 'Timeframe'
},
{
id: 3,
name: 'Past month',
selected: false,
key: 'Timeframe'
},
{
id: 4,
name: 'Past year',
selected: false,
key: 'Timeframe'
}
]
},
{
title: 'Location',
options: [
{
id: 0,
name: 'Location 1',
selected: false,
key: 'Location'
},
{
id: 1,
name: 'Location 2',
selected: false,
key: 'Location'
},
{
id: 2,
name: 'Location 3',
selected: false,
key: 'Location'
},
{
id: 3,
name: 'Location 4',
selected: false,
key: 'Location'
}
]
}
];
这里是算法:
selectFilter = ({ id, key }) => {
const { filtersList, selectedFilters } = this.state;
const tempFilters = filtersList;
const tempSelected = selectedFilters;
const i = tempSelected.length;
tempFilters.forEach((filter) => {
if (filter.title === key) {
filter.options.forEach((option) => {
if (option.id === id) {
option.selected = !option.selected;
const isFilterExist = tempSelected.filter(
(selectedFilter) => selectedFilter.name === option.name
);
if (!isFilterExist.length) {
const selectedItem = { name: option.name, key, id };
tempSelected[i] = selectedItem;
}
}
});
}
});
this.setState({
filtersList: tempFilters,
selectedFilters: tempSelected
});
};
在代码笔上,您可以找到纯 javascript 代码的版本。
如何让搜索算法更干净更快速?
任何建议文章、教程、评论?
【问题讨论】:
-
不确定我是否同意您尝试管理选定的方式,我在下面有解决方案。
标签: javascript arrays reactjs algorithm search