You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:52:43