Javascript 如何按动态对象数组过滤数组?

Javascript 如何按动态对象数组过滤数组?,javascript,arrays,filter,lodash,Javascript,Arrays,Filter,Lodash,我有一个巨大的700多个数据项的集合,我想通过对象的动态数组进行过滤,假设用户键入了ode,我的脚本应该在每个过滤器上搜索,而不必执行类似filter.code==store.code的操作 我期待的结果是 // output [{name : "store 1", code : "code 1", available : false},{name : "store 2",code : "simple_code",available : true}] 我用lodash解决了这个问题,但函数非常

我有一个巨大的700多个数据项的集合,我想通过对象的动态数组进行过滤,假设用户键入了ode,我的脚本应该在每个过滤器上搜索,而不必执行类似filter.code==store.code的操作

我期待的结果是

// output
[{name : "store 1", code : "code 1", available : false},{name : "store 2",code : "simple_code",available : true}]
我用lodash解决了这个问题,但函数非常慢,代码也很差,还有其他方法可以解决这个问题吗

const results = []
_.map(hugeData, store => {
    _.map(filters, tag => {
        Object.keys(tag).map(tagOb => {
          if (store[tagOb] && store[tagOb].includes(tag[tagOb])) {
             results.push(store);
          }
        });
    });
});

这可能会更快—存储Object.keys结果,并过滤掉第一个存储区之外的所有键(假设所有存储区都相等)。我还使用单个对象作为过滤器

常数hugeData=[ {name:store 1,code:code 1,available:false}, {name:store2,代码:simple_code,available:true}, {name:sto 3,代码:没有cde,可用:true} ]; 常量过滤器={code:ode,name:re}; const keys=Object.keysfilters.filterk=>hugeData[0].hasOwnPropertyk; console.log hugeData.filters=>keys.somek=>s[k]。includeFilters[k]
; 这可能会更快—存储Object.keys结果,并过滤掉第一个存储区之外的所有键(假设所有存储区都相等)。我还使用单个对象作为过滤器

常数hugeData=[ {name:store 1,code:code 1,available:false}, {name:store2,代码:simple_code,available:true}, {name:sto 3,代码:没有cde,可用:true} ]; 常量过滤器={code:ode,name:re}; const keys=Object.keysfilters.filterk=>hugeData[0].hasOwnPropertyk; console.log hugeData.filters=>keys.somek=>s[k]。includeFilters[k] ; 您可以使用过滤器和一些

const hugeData=[{name:store 1,code:code 1,available:false},{name:store 2,code:simple_code,available:true},{name:sto 3,code:has no cde,available:true}] 常量过滤器={code:ode,name:re} 让final=hugeData.filtervalue=>{ return Object.entriesvalue.some[key,value]=>{ 返回typeof value=='string'&&value.includeFilters[key] } } console.logfinal您可以使用过滤器和一些

const hugeData=[{name:store 1,code:code 1,available:false},{name:store 2,code:simple_code,available:true},{name:sto 3,code:has no cde,available:true}] 常量过滤器={code:ode,name:re} 让final=hugeData.filtervalue=>{ return Object.entriesvalue.some[key,value]=>{ 返回typeof value=='string'&&value.includeFilters[key] } }
LogFinalFilters难道不是键值对的单个对象吗?为什么它需要在一个数组中?@Anthony是的,我可以修改它,但如果它是一个简单的对象,那应该如何工作?多个过滤器是否意味着它们都必须匹配?ode是什么?@Anthony不是所有过滤器都必须匹配,只有一个匹配,结果应该出现。过滤器不应该只是一个键值对的单个对象吗?为什么它需要在一个数组中?@Anthony是的,我可以修改它,但如果它是一个简单的对象,该如何工作?多个过滤器是否意味着它们都必须匹配?什么是ode?@Anthony不是所有过滤器都必须匹配,只有一个匹配,结果应该出现
const results = []
_.map(hugeData, store => {
    _.map(filters, tag => {
        Object.keys(tag).map(tagOb => {
          if (store[tagOb] && store[tagOb].includes(tag[tagOb])) {
             results.push(store);
          }
        });
    });
});