我在下面具有JSON格式的状态,并且在选择类别时也具有复选框状态。
initialData = [
{ store_name: 'Shop 1',
women: false,
men: false,
kids: true},
{ store_name: 'Shop 2',
women: true,
men: false,
kids: false},
{ store_name: 'Shop 3',
women: false,
men: true,
kids: true}
]
我该如何编写更新showFilteredResults函数,该函数基于filteredArray来过滤initialData?
即如果filteredArray = ['kids','men'],则输出应返回键0(商店1)和键2(商店2)的数据,其中kids = true或men = true。我当前拥有的功能可以显示所有结果。
const [initialData, setInitialData] = useState([{}])
const [Filters, setFilters] = useState({
categories: []
})
//tried the function below, which does not work
const showFilteredResults = (filteredArray) => {
let filteredResults = initialData.filter( function(main_el) {
return filteredArray.filter(function(e){
return main_el.e ===true;})
});
答案 0 :(得分:1)
您可以通过查找过滤器键之一进行过滤。
const
initialData = [{ store_name: 'Shop 1', women: false, men: false, kids: true }, { store_name: 'Shop 2', women: true, men: false, kids: false }, { store_name: 'Shop 3', women: false, men: true, kids: true }],
filteredArray = ['kids', 'men'],
result = initialData.filter(object => filteredArray.some(key => object[key]));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
const initialData = [
{ store_name: 'Shop 1',
women: false,
men: false,
kids: true},
{ store_name: 'Shop 2',
women: true,
men: false,
kids: false},
{ store_name: 'Shop 3',
women: false,
men: true,
kids: true}
]
const filter = ['kids', 'mens'];
const showFilteredResults = (filteredArray) => initialData.filter(data => filter.some(a => data[a]));
console.log(showFilteredResults(filter))