Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于对象的Lodash滤波_Javascript_Lodash - Fatal编程技术网

Javascript 基于对象的Lodash滤波

Javascript 基于对象的Lodash滤波,javascript,lodash,Javascript,Lodash,你知道如何在lodash中编写一个函数,用过滤器逐个过滤对象数组吗 const arr = [{a: 1, b:22, c:44, }, {a: 123, b: 33, c: 3}, {d: 'example'}]; //Behavior filters = { d: 'e' }; //result [{d: 'example'] filters = { b: 3, a: 1} //result [{a: 123, b: 33, c: 3}] filters = { b: 2, d: '

你知道如何在lodash中编写一个函数,用过滤器逐个过滤对象数组吗

const arr = [{a: 1, b:22, c:44, }, {a: 123, b: 33, c: 3}, {d: 'example'}];

//Behavior

filters = { d: 'e' };
//result [{d: 'example']

filters = { b: 3, a: 1}
//result [{a: 123, b: 33, c: 3}]

filters = { b: 2, d: 'e' };
//result []
我的解决方案:

filterRows (originalRows, filters) {
  filters = _.toPairs(filters);
  return originalRows.filter(row =>
    filters.every(([filterKey, filterValue]) => {
      const rowValue = _.toLower(row[filterKey]), 
            filter = _.toLower(filterValue);
      return rowValue.includes(filter); 
    })
  );
}

但是也许有更干净的方法来写这个。

A
non-lodash
解决方案:

filterRows (originalRows, filters) {
  filters = _.toPairs(filters);
  return originalRows.filter(row =>
    filters.every(([filterKey, filterValue]) => {
      const rowValue = _.toLower(row[filterKey]), 
            filter = _.toLower(filterValue);
      return rowValue.includes(filter); 
    })
  );
}
  • 用于筛选出
    对象
  • 用于检查是否所有 要过滤的值通过条件传递
根据传递的对象生成一个通用函数来过滤数组

const arr=[{
答:1,,
b:22,
c:44,
}, {
a:123,
b:33,
c:3
}, {
d:‘例子’
}];
变量过滤器1={
d:‘e’
};
变量过滤器2={
b:3,
a:1
};
变量过滤器3={
b:2,
d:‘e’
};
函数过滤器对象(数组、过滤器){
var keys=Object.keys(过滤器);
返回数组.过滤器(函数(el){
返回键。每个(函数(k){
返回el[k]&&el[k].toString().indexOf(filter[k].toString())!=-1;
});
});
}
日志(filterObject(arr,filter1));
日志(filterObject(arr,filters2));

日志(filterObject(arr,filter3))我想一个简单的纯JS函数就足够了

var arr=[{a:1,b:22,c:44,},{a:123,b:33,c:3},{d:'example'}],
过滤器1={d:'e'},
过滤器2={b:3,a:1},
filter3={b:2,d'e'},
filter=(a,f)=>a.filter(o=>{var-oks=Object.keys(f);
返回ok.every(k=>o[k]!==void 0&&(o[k]+).indexOf(f[k])!=-1;
});
日志(过滤器(arr,过滤器1));
日志(过滤器(arr,过滤器2));

日志(过滤器(arr,过滤器3))你说得对。我的错误。第二个例子应该是:[{a:123,b:33,c:3}]