为了账号安全,请及时绑定邮箱和手机立即绑定

js怎么实现多条件筛选出符合的数据(仿sql多字段查找)

js怎么实现多条件筛选出符合的数据(仿sql多字段查找)

HUWWW 2019-03-07 18:13:58
var conditionArr=[{        name:'广州',        type:'area'    },{        name:'一本',        type:'batch'    }];    var dataArr=[{        name:'广州大学1',        area:'广州',        batch:'一本'    },{        name:'广州大学2',        area:'广州',        batch:'一本'    },{        name:'广州大学3',        area:'深圳',        batch:'一本'    },{        name:'广州大学4',        area:'深圳',        batch:'二本'    },{        name:'广州大学5',        area:'广州',        batch:'二本'    },{        name:'广州大学6',        area:'广州',        batch:'二本'    }];    // conditionArr是筛选的条件(动态变化的),当conditionArr多一个数组时,dataArr中的每个对象就会多一个属性【此处简化属性,刚开始就有对应值】    var temp=[];    for(var i=0;i<dataArr.length;i++){        for(var j=0;j<conditionArr.length;j++){            if (dataArr[i][conditionArr[j].type] === conditionArr[j].name){                temp.push(schoolList[i]);            }        }    }    // 当conditionArr一个数组(一个条件)时没有问题,两个以上就是叠加数据了    console.log(temp);
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

var temp=[],bool; 

for(var i=0;i<dataArr.length;i++){ 

  bool = true

  for(var j=0;j<conditionArr.length;j++){ 

    if (dataArr[i][conditionArr[j].type] !== conditionArr[j].name){ 

      bool = false; 

    } 

  } 

  bool && temp.push(dataArr[i])

console.log(temp);


查看完整回答
反对 回复 2019-03-18
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

let result = dataArr.filter(data => 

    conditionArr.map(condition => data[condition['type']] === condition['name']

        .indexOf(false) === -1

)

// "[{"name":"广州大学1","area":"广州","batch":"一本"},

//   {"name":"广州大学2","area":"广州","batch":"一本"}]"

内部对条件数组进行一个映射:规则是 data[condition['type']] === condition['name']。


此时如果正在遍历到


{

    name:'广州大学1',

    area:'广州',

    batch:'一本'

}

conditionArr 就变成了:


[ true, true ]

如果是


{

    name:'广州大学3',

    area:'深圳',

    batch:'一本'

}

那么 conditionArr 就变成了:


[ false, true ]

所以只需要对每一个学校进行一次条件数组的映射,如果映射结果有 false,就说明有条件不满足,反之就是满足所有条件。


根据这个再对 dataArr 进行一次过滤即可。


查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 1755 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信