寻求支持数学运算的JS版LQL链接过滤npm库
解决方案:支持数学运算与多字段关联的JS数组过滤工具
针对你的需求——让用户输入包含数学运算、多字段关联的过滤条件来筛选JS对象数组,以下几个npm包可以满足要求:
1. expr-eval
这是轻量级的表达式解析器,完美适配你的场景,支持直接引用对象属性、复杂数学运算,语法和JS表达式高度一致,用户学习成本低。
使用示例:
import { Parser } from 'expr-eval'; const parser = new Parser(); // 用户在输入框中输入的过滤条件 const userFilter = "height > (3 * weight / 4)"; const parsedExpr = parser.parse(userFilter); // 执行过滤 const filteredHumans = arrayOfHumans.filter(human => parsedExpr.evaluate(human));
你可以通过配置Parser来限制允许的函数和变量,降低安全风险,比如禁用全局对象访问。
2. mathjs
作为功能全面的数学库,它同样支持解析包含对象属性引用的表达式,还提供了丰富的数学函数(如平方根、三角函数等),适合需要更复杂运算场景的需求。
使用示例:
import { evaluate } from 'mathjs'; const userFilter = "height > (3 * weight / 4)"; const filteredHumans = arrayOfHumans.filter(human => evaluate(userFilter, human));
3. json-query
专注于JSON数据查询的工具,支持用表达式作为过滤条件,语法简洁,同时支持链式查询操作,适合需要结合其他JSON查询逻辑的场景。
使用示例:
import jsonQuery from 'json-query'; const userFilter = '[*height > (3 * weight / 4)]'; const filteredHumans = jsonQuery(userFilter, { data: arrayOfHumans }).value;
安全提醒
允许用户输入自定义表达式存在代码注入风险,建议:
- 对用户输入的表达式进行语法校验和白名单限制(比如仅允许引用指定字段、使用指定运算)
- 敏感数据的过滤操作尽量在后端执行,避免前端直接处理敏感逻辑
内容的提问来源于stack exchange,提问作者The Traveling Coder
相关产品推荐
相关产品推荐

