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

https://img1.mukewang.com/5c8f40b20001911f08000664.jpg

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);


HUWWW
浏览 1756回答 3
3回答

芜湖不芜

var temp=[],bool;&nbsp;for(var i=0;i<dataArr.length;i++){&nbsp;&nbsp; bool = true&nbsp; for(var j=0;j<conditionArr.length;j++){&nbsp;&nbsp; &nbsp; if (dataArr[i][conditionArr[j].type] !== conditionArr[j].name){&nbsp;&nbsp; &nbsp; &nbsp; bool = false;&nbsp;&nbsp; &nbsp; }&nbsp;&nbsp; }&nbsp;&nbsp; bool && temp.push(dataArr[i])}&nbsp;console.log(temp);

米琪卡哇伊

let result = dataArr.filter(data =>&nbsp;&nbsp; &nbsp; conditionArr.map(condition => data[condition['type']] === condition['name']&nbsp; &nbsp; &nbsp; &nbsp; .indexOf(false) === -1)// "[{"name":"广州大学1","area":"广州","batch":"一本"},//&nbsp; &nbsp;{"name":"广州大学2","area":"广州","batch":"一本"}]"内部对条件数组进行一个映射:规则是 data[condition['type']] === condition['name']。此时如果正在遍历到{&nbsp; &nbsp; name:'广州大学1',&nbsp; &nbsp; area:'广州',&nbsp; &nbsp; batch:'一本'}conditionArr 就变成了:[ true, true ]如果是{&nbsp; &nbsp; name:'广州大学3',&nbsp; &nbsp; area:'深圳',&nbsp; &nbsp; batch:'一本'}那么 conditionArr 就变成了:[ false, true ]所以只需要对每一个学校进行一次条件数组的映射,如果映射结果有 false,就说明有条件不满足,反之就是满足所有条件。根据这个再对 dataArr 进行一次过滤即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript