Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
使用jQuery查询生成器单独计算表达式_Jquery_Json_Jsonpath_Jquery Query Builder - Fatal编程技术网

使用jQuery查询生成器单独计算表达式

使用jQuery查询生成器单独计算表达式,jquery,json,jsonpath,jquery-query-builder,Jquery,Json,Jsonpath,Jquery Query Builder,我有一个评估学生成绩的系统。我应该能够在JSON对象中动态定义评估标准。例如,如果出现以下情况,学生将通过Java编程模块: (courseWorkMarks > 30 && inClassTest > 40) || examMarks > 40 // pass 条件因模块而异,因此每个模块都有一个描述评估标准的json对象。我想用它来做这个。我可以使用其UI构建公式,并将其保存为JSON,我在JSON对象中有一个模块的学生分数列表,如下所示: {course

我有一个评估学生成绩的系统。我应该能够在JSON对象中动态定义评估标准。例如,如果出现以下情况,学生将通过Java编程模块:

(courseWorkMarks > 30 && inClassTest > 40) || examMarks > 40 // pass
条件因模块而异,因此每个模块都有一个描述评估标准的json对象。我想用它来做这个。我可以使用其UI构建公式,并将其保存为JSON,我在JSON对象中有一个模块的学生分数列表,如下所示:

{courseWorkMarks: 50, inClassTest: 35, examMarks: 45}
  • 如何使用jQuery QueryBuilder生成的JSON检查该学生是否满足通过标准

  • 我想分别显示每个条件的通过/失败标准。上述情况的示例:

    • 课程作业成绩-及格
    • 测试结果-失败
    • examMarks结果-通过
    • 整体成绩-及格

  • 我可以用JSON路径来实现,但它没有像jQuery QueryBuilder这样的图形查询生成器。我遇到的主要问题是我不明白如何使用jQuery QueryBuilder生成的JSON输出来评估我拥有的数据。是否可以使用jQuery QueryBuilder执行我想要的操作?还有其他javascript工具可以做到这一点吗?

    我回答这个问题有点晚了,希望您现在已经找到了解决方案

    最近,我还在我的一个项目中使用了jQuery QueryBuilder,并想出了以下解决方案

    var lastOperator = [];
    var rulesLengths = [];
    var ruleLevel = 0;
    var equationString = '';
    var rulesData = {
         "condition": "AND",
         "rules": [
            {
               "id": "genderSelect",
               "field": "genderSelect",
               "type": "string",
               "input": "select",
               "operator": "equal",
               "value": "Male"
            },
            {
               "id": "ageSelect",
               "field": "ageSelect",
               "type": "string",
               "input": "select",
               "operator": "equal",
               "value": "18-26"
            }
         ],
         "valid": true,
      };
    
    var expr = checkDisplayLogic(rulesData);
    var flag = eval(expr);
    /** Recursive function to convert json data to expression **/
    function checkDisplayLogic(rulesData) {
        if (rulesData['rules'] !== undefined) {
            ruleLevel++;
            var operator = rulesData['condition'];
            lastOperator.push(operator);
            rulesLengths.push(rulesData.rules.length);
            equationString += '(';
            $.each(rulesData.rules, function (idx, elem) {
                checkDisplayLogic(elem);
                if (rulesLengths[rulesLengths.length - 1] == idx + 1) {
                    equationString += ')';;
                    rulesLengths.pop();
                    ruleLevel--;
                    lastOperator.pop();
                }
                else {
                    if (lastOperator.length !== 0)
                        equationString += ' ' + (operator === 'AND' ? '&&' : '||' ) + ' ';
                }
            });
        }
        else {
            var inputType = rulesData.input;
            switch (inputType) {
                case 'select':
                    var ctrl = $('#' + rulesData.id);
                    //Below logic will change depending upon the operator selected in QueryBuilder. 
                    //In my case operator is 'equal' that's why I am using '===' operator for comparison
                    equationString += (ctrl.val() === rulesData.value).toString();
                    break;
                /****** Similarly create cases for other input types QueryBuilder provide ********/
            }
        }
    
        return equationString;
    } 
    
    快乐编码