JS实现条件查询筛选与条件设值算法
结果展示
为了不浪费大家时间,避免看了发现不是自己想要的东西。我先将结果展示出来。
上图:原始数据
点击查询后条件筛选展示
点击查询后条件设值展示
两个方法结合使用。
注:1.以上是JS的条件操作,仅限数据已经在前台时使用。2.条件筛选暂时不能同一字段两个条件
一,条件筛选实现原理
简述:第一步,转换参数格式。第二步,参数对比。
第一步:将对象的格式转换为{key:[],key:[],key:[]}。将同样key的的value归到同一个数组中。方便循环对比。
/**
* 条件查询
* @author zhou
* @param tableArr表格参数[{},{},{}],where查询条件格式。威胁名称=K and 采取操作=1232321
* @returns [{},{},{}]
*/
function queryCriteria(tableArr, where) {
//第一步开始:将tableArr转换为{字段:[],字段:[],字段:[]}。然后进行解读判断
var listMap = {
}
for (var i = 0; i < tableArr.length; i++) {
for (var k in tableArr[i]) {
if (listMap[k]) {
listMap[k].push(tableArr[i][k]);
} else {
var arr = [];
arr.push(tableArr[i][k]);
listMap[k] = arr;
}
}
}
//第二步开始
var criteriaArr = where.split(" and ");
//需要删除的对象的下标
var delectArr = {
};
for (var i3 = 0; i3 < criteriaArr.length; i3++) {
for (var k in listMap) {
//判断字段是否存在
if (criteriaArr[i3].indexOf(k) != -1) {
for (var i = 0; i < listMap[k].length; i++) {
var newCriteriaArr = criteriaArr[i3].replace(k, listMap[k][i]);
//转换为可判断的表达式,返回判断结果
var booleanIf = judge(newCriteriaArr);
if (!booleanIf) {
//记录不满足条件的下标
delectArr["index"