鍍金池/ 問答/Java  PHP  HTML/ js怎么實現(xiàn)多條件篩選出符合的數(shù)據(jù)(仿sql多字段查找)

js怎么實現(xiàn)多條件篩選出符合的數(shù)據(jù)(仿sql多字段查找)

clipboard.png

var conditionArr=[{
        name:'廣州',
        type:'area'
    },{
        name:'一本',
        type:'batch'
    }];

    var dataArr=[{
        name:'廣州大學(xué)1',
        area:'廣州',
        batch:'一本'
    },{
        name:'廣州大學(xué)2',
        area:'廣州',
        batch:'一本'
    },{
        name:'廣州大學(xué)3',
        area:'深圳',
        batch:'一本'
    },{
        name:'廣州大學(xué)4',
        area:'深圳',
        batch:'二本'
    },{
        name:'廣州大學(xué)5',
        area:'廣州',
        batch:'二本'
    },{
        name:'廣州大學(xué)6',
        area:'廣州',
        batch:'二本'
    }];

    // conditionArr是篩選的條件(動態(tài)變化的),當(dāng)conditionArr多一個數(shù)組時,dataArr中的每個對象就會多一個屬性【此處簡化屬性,剛開始就有對應(yīng)值】

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

        }
    }

    // 當(dāng)conditionArr一個數(shù)組(一個條件)時沒有問題,兩個以上就是疊加數(shù)據(jù)了
    console.log(temp);
回答
編輯回答
單眼皮

也許你可以考慮underscore.js行不行

2018年5月22日 14:21
編輯回答
任她鬧
let result = dataArr.filter(data => 
    conditionArr.map(condition => data[condition['type']] === condition['name']
        .indexOf(false) === -1
)
// "[{"name":"廣州大學(xué)1","area":"廣州","batch":"一本"},
//   {"name":"廣州大學(xué)2","area":"廣州","batch":"一本"}]"

內(nèi)部對條件數(shù)組進(jìn)行一個映射:規(guī)則是 data[condition['type']] === condition['name']

此時如果正在遍歷到

{
    name:'廣州大學(xué)1',
    area:'廣州',
    batch:'一本'
}

conditionArr 就變成了:

[ true, true ]

如果是

{
    name:'廣州大學(xué)3',
    area:'深圳',
    batch:'一本'
}

那么 conditionArr 就變成了:

[ false, true ]

所以只需要對每一個學(xué)校進(jìn)行一次條件數(shù)組的映射,如果映射結(jié)果有 false,就說明有條件不滿足,反之就是滿足所有條件。

根據(jù)這個再對 dataArr 進(jìn)行一次過濾即可。

2018年2月11日 17:38
編輯回答
尐飯團(tuán)
function deleteData(name) {
    var persons = conditionArr;
    for (var i = 0; i < persons.length; i++) {
        var cur_person = persons[i];
        if (cur_person.name== name) {
            //push
        }
    }
}
2017年12月23日 14:05
編輯回答
幼梔
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);
2017年5月13日 19:09