如何对json-logic自定义函数返回值取反?求问题排查帮助
问题排查方案
最可能的原因:自定义函数注册不匹配
json-logic的操作符名称区分大小写,如果注册时的函数名和规则里的名称不一致,或者未正确注册,json-logic会将未知操作视为undefined,而!undefined的结果是true,刚好符合你的现象。
验证与修复:
确保注册的函数名和规则中的名称完全一致:
// 注册时的名称要和规则里的"customFunction"完全匹配 jsonLogic.addOperation('customFunction', customFunction);单独验证自定义函数在规则中的执行结果:
const testRule = {"customFunction": [["math"], {"var": "STUDENT.CLASSROOM.SUB"}]}; const testData = { STUDENT: { CLASSROOM: { SUB: 'math' } } }; const testResult = jsonLogic.apply(testRule, testData); console.log(testResult); // 正常应该输出true,若输出undefined则说明注册失败
其他排查方向
确认
!操作符本身正常:const notTest = {"!": true}; console.log(jsonLogic.apply(notTest)); // 应输出false,若异常则是json-logic核心问题检查自定义函数参数签名:json-logic的自定义操作函数第一个参数是传入的参数数组,第二个是data对象,确保签名符合规范:
const customFunction = (args, data) => { // args为规则中传入的参数数组:[["math"], data.STUDENT.CLASSROOM.SUB] return true; };升级json-logic版本:若使用旧版本,可能存在自定义函数与取反操作的交互bug,尝试升级到最新版的
json-logic-js。
内容的提问来源于stack exchange,提问作者schutte
相关产品推荐
相关产品推荐

