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);
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 进行一次过滤即可。
添加回答
举报