根据过滤器数组返回对象

时间:2020-08-24 19:15:12

标签: javascript arrays json reactjs filter

我在下面具有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;})
});

2 个答案:

答案 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))