回调函数
有以下数据:
js
var students = [
{
id: 988985,
name: '梁平',
sex: '女',
age: 15,
address: '安徽省 淮南市',
tel: '12957961008',
},
{
id: 299422,
name: '邱杰',
sex: '男',
age: 25,
address: '辽宁省 本溪市',
tel: '12685726676',
},
{
id: 723972,
name: '王超',
sex: '女',
age: 14,
address: '新疆维吾尔自治区 阿克苏地区',
tel: '15277794541',
}
];需要得到以下数据:
js
//1.得到所有女生
//2. 得到所有20岁以下的女生
// 3.得到所有姓赵的同学
// 4.得到所有居住在黑龙江的女生
// 以第一个为解
let students=[];
for(let i = 0; i <students.length; i++){
if(students[i].sex === '女'){
students.push(students[i]);
}
}
console.log(students);现在解决第二题,会发现,所有的格式都一样,只是判断条件不同,能否封装一个函数,传入判断条件,返回结果呢?
可以,封装一个函数:
js
function filter(students,callback){
let result=[];
for(let i = 0; i <students.length; i++){
if(callback(students[i])){//回调函数作为条件,且还可以把某些数据作为参数传递给用户
result.push(students[i]);
}
}
return result;
}以上就是将一个函数当为参数传递到函数内,然后在函数内部合适的时机去调用这个函数,还可以把内部的某些数据当作参数传递给用户,至于用户用否,完全取决于个人。
那么接下来的题就都迎刃而解了:
js
// 得到所有20岁以下的女生
const res = filter(students,function(student){
return student.sex === '女' && student.age < 20;
});
// 得到所有姓赵的同学
const res2 = filter(students,function(student){
return student.name[0] === '赵';
});
// 得到所有居住在黑龙江的女生
const res3 = filter(students,function(student){
return student.address.indexOf('黑龙江') !== -1 && student.sex === '女';
});