如何使用new Function创建自定义链式过滤方法
如何基于动态过滤条件生成函数并返回布尔值?
我目前在做一个表格列过滤的功能,用户可以给某一列设置多个叠加的过滤条件(比如要求ID同时满足大于10、小于40且等于22)。我希望每个数据值只需要和所有过滤条件对比一次,尽量优化过滤操作的性能。
现有数据说明
我已经拿到了结构化的过滤条件数组,示例如下:
const filters = [ { value: 10, operator: '<' }, { value: 40, operator: '>' }, { value: 22, operator: '==' }, ]
对应的列数据示例:
const columnData = [10,22,3,1,14,15,69,22,...]
我的思路
我觉得用new Function动态生成过滤逻辑是个不错的方案——把所有条件拼接成类似colData > 10 && colData < 40 && colData == 22的字符串,然后创建一个函数来执行这个逻辑,这样就能灵活应对任意数量的过滤条件。
期望效果
我想要实现的最终效果大概是这样:
const colVal = 22 const testFn = new Function('colData', 'return colData > 10 && colData < 40 && colData == 22' // 这里的逻辑字符串需要根据filters动态生成 ) console.log(testFn(colVal)) // 输出true;
我遇到的问题
我尝试了下面的代码,但它返回的是拼接后的字符串,而不是我需要的布尔值结果:
const colVal = 22 const y = (colData) => `${colData}` + ' > 10 && ' + `${colData}` + ' < 40 && ' + `${colData}` + ' == 22' const testFn = new Function('y', 'colVal', 'return y(colVal)' ) console.log(testFn(y, colVal )); // 输出"22 > 10 && 22 < 40 && 22 == 22"
请问有没有办法正确生成这个过滤逻辑字符串,并用new Function创建出能返回布尔值的过滤函数?
内容的提问来源于stack exchange,提问作者wittgenstein
相关产品推荐
相关产品推荐

