当前位置: 首页 > 工具软件 > DataQL > 使用案例 >

DataQL 数组过滤算法实例

莘绍元
2023-12-01
import 'net.hasor.dataql.fx.basic.StringUdfSource' as string;
import 'net.hasor.dataql.fx.basic.CollectionUdfSource' as collect;

// 要求获取男同学中,成绩为优秀的科目

var students = [
    {"name":"A", "sex":"F", "result": [{"yw":"优秀"}, {"sx":"优秀"}, {"wl": "良好"}] },
    {"name":"B", "sex":"M", "result": [{"yw":"及格"}, {"sx":"良好"}, {"wl": "优秀"}] },
    {"name":"C", "sex":"F", "result": [{"yw":"良好"}, {"sx":"优秀"}, {"wl": "及格"}] },
    {"name":"D", "sex":"M", "result": [{"yw":"良好"}, {"sx":"及格"}, {"wl": "优秀"}] },
    {"name":"F", "sex":"M", "result": [{"yw":"优秀"}, {"sx":"良好"}, {"wl": "良好"}] }
];

// 第一次过滤,获取男同学信息
var manStudents = collect.filter(students, (stu) -> {
    return string.indexOf("F", stu.sex) != -1;
});
/**
 * manStudents结果集
 * {"name":"A", "sex":"F", "result": [{"yw":"优秀"}, {"sx":"优秀"}, {"wl": "良好"}] },
 * {"name":"C", "sex":"F", "result": [{"yw":"良好"}, {"sx":"优秀"}, {"wl": "及格"}] },
**/

// 第二次过滤,获取男同学中成绩为优秀的科目
var mans = manStudents =>[{
    "name": #.name,
    "result": collect.filter(#.result, (res) -> {
        if( res.yw == "优秀" || res.sx == "优秀" || res.wl == "优秀" ){
            return true;
        }else{
            return false;
        }
    })
}];

// 返回结果集
return mans;
// 结果集

{
  "code": 200,
  "data": [
    {
      "name": "A",
      "result": [
        {
          "yw": "优秀"
        },
        {
          "sx": "优秀"
        }
      ]
    },
    {
      "name": "C",
      "result": [
        {
          "sx": "优秀"
        }
      ]
    }
  ],
  "msg": "操作成功"
}
 类似资料: