什么是高阶函数?
高阶函数的定义:如果一个函数操作其他函数,即将其他函数作为参数或将
函数作为返回值,则称这个函数是一个高阶函数。javascript的数组中有常用哪些高阶数组?
数组的高阶函数一览表
函数的作用
函数名
描述
遍历
forEach 接收一个操作当前元素的函数,从而完成遍历中重复的操作,此函数没有返回值(注:可参考下列模拟源代码来分析为什么没有返回值,因为即使传递一个有返回值的函数当参数,每次操作中产生的返回值也只是参数函数的返回值,不是forEach函数的返回值) 过滤 filter 接收一个判断每个元素是否符合过滤条件的函数,从而过滤出符合条件的元素(注:类似SQL语句中的where子句) 映射 map 接收一个返回指定映射属性的值的函数(注:类似SQL语句中的select语句) 聚合汇总 reduce 接收两个参数,第一个参数是描述数据聚合策略的函数(该函数必需有两个参数,第一个是汇总变量,第二个是遍历时的当前值),第二个参数值是统计变量的初始值(注:返回的结果是一个独立的值)
//数组中的高阶函数 forEach
console.log("------------数组中的高阶函数 forEach------------");
function forEach(array,action){
for(var i=0; i<array.length; i++)
action(array[i]);
}
var strs=["tom","zack","leo"];
//forEach(strs,console.log);
var numbers=[0,1,2,3,4,5,6,7,8,9],sum=0;
//forEach(numbers,function(number){sum += number;});
//console.log(sum);
numbers.forEach(function(number){sum += number;});
console.log(sum);
//numbers.forEach(console.log);
//JSON test
console.log("------------JSON test------------");
var obj = {
"name":"lili",
"sex":"female",
"age":18
};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr);
var jsonObj = JSON.parse(jsonStr);
console.log(jsonObj);
//数组中的高阶函数 filter
console.log("------------数组中的高阶函数 filter------------");
var persons = [
{"name":"lili",
"sex":"female",
"age":18},
{"name":"zack",
"sex":"male",
"age":20},
{"name":"ruby",
"sex":"female",
"age":24},
{"name":"leo",
"sex":"male",
"age":30},
{"name":"lucy",
"sex":"female",
"age":35},
];
var passedBySex = persons.filter(
function(person){
return person.sex=="male";
});
console.log(passedBySex);
//数组中的高阶函数 map
console.log("------------数组中的高阶函数 map------------");
var mapName = passedBySex.map(
function(person){
return person.name;
});
console.log("单项数据映射name:",mapName);
var personsNameAndAge = persons.map(
function(person){
return {"name":person.name,"age":person.age};
});
console.log("多项数据映射name和age:",personsNameAndAge);
//数组中的高阶函数 reduce
console.log("------------数组中的高阶函数 reduce------------");
var personsAge = persons.map(function(person){return person.age;});
var reduceAge = personsAge.reduce(
function(a,b){
return a+b;
});
console.log(reduceAge,persons[0].age+persons[1].age);
此外数组中还有两个标准方法,分别是every和some,every函数的作用类似于运算符&&,some函数的作用类似于||
var numbers = [11,12,13,14,22,23];
var test=numbers.every(function(num){
return num>10;
});
console.log(test);
test=numbers.some(function(num){
return num>16;
});
console.log(test);