高阶函数基础知识

/*
 * 编程范式:命令式编程/声明式编程       面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
 * filter   map   reduce
 */

const nums = [10,20,111,222,444,40,50];

//===================================================传统写法
//1.取出所有小于100的数字
let newNums1 = [];
for(let n of nums){
	if(n<100){
		newNums1.push(n);
	}
}
console.log(newNums1);

//2.将所有小于100的数字乘以2
let newNums2 = [];
for(let n of newNums1){
	newNums2.push(n*2);
}
console.log(newNums2);

//3.将所有数字相加
let total = 0;
for(let n of newNums2){
	total += n;
}
console.log(total);


//===================================================高阶函数

/*
 * filter:回调函数必须返回一个Boolean     ====》过滤不符合回调函数的值
 * 	true:函数内部自动将这次调用的n加入到新数组
 * 	false::函数内部过滤调这次的n
 * 
 * 虚函数
 * var array = {
 * 		a:[10,20,111,222,444,40,50];
 * 		
 * 		filter:function(func){
 * 			var result=[];
 * 			for(var i=0;i<a.lenght;i++){
 * 				if(func && func(a[i]) ){
 * 					result.append(a[i]);
 * 				}
 * 			}
 * 			return result;
 * 		}
 * }
 * 
 * func:回调函数
 * func:function(n){
 * 		return n<100;
 * }
 */
//newNums1 = [10,20,40,50]
let newNums1 = nums.filter(function(n){
	return n<100;
})
console.log(newNums1);

/*
 * map: ====》映射除一组新的计算结果
 * 
 * 虚函数
 * var array = {
 * 		a:[10,20,40,50];
 * 		
 * 		map:function(func){
 * 			var result=[];
 * 			for(var i=0;i<a.lenght;i++){
 * 				if(func){
 * 					result.append(func(a[i]));
 * 				}
 * 			}
 * 			return result;
 * 		}
 * }
 * 
 * func:回调函数
 * func:function(n){
 * 		return n*2;
 * }
 */
//newNums2 = [20,40,80,100]
let newNums2 = newNums1.map(function(n){
	return n*2;//映射规则
})
console.log(newNums2);

/*
 * reduce:规约函数/合并函数      ====》对数组中所有内容汇总
 * 	preValue:初始值
 * 	n:当前值
 * 
 * 第一个参数:回调函数
 * 第二个参数:初始值
 * 
 * 虚函数
 * var array = {
 * 		a:[20,40,80,100];
 * 		
 * 		reduce:function(func,prevalue){
 * 			var result=0;
 * 			for(var i=0;i<a.lenght;i++){
 * 				if(func){
 * 					var r = func(prevalue,a[i]);
 * 					prevalue = r;
 * 				}
 * 			}
 * 			return result;
 * 		}
 * }
 * 
 * func:回调函数
 * func:function(preValue,n){
 * 		return preValue+n;
 * }
 */
//newNums3 = 
let newNums3 = newNums2.reduce(function(preValue,n){
	return preValue+n;//映射规则
},0)
console.log(newNums3);

//===================================================高级写法:链式调用方式
//1.普通链式调用
let result = nums.filter(function(n){
	return n<100;
}).map(function(n){
	return n*2;
}).reduce(function(pre,n){
	return pre+n;
},0);
console.log(result);

//2.lambda写法
//无参                 ()=>操作
//有 一个参         参数 => 操作
//有 两个参        (参数1,参数2) => 操作
let result = nums.filter(n=>n<100).map(n=>n*2).reduce((pre,n)=>pre+n);
console.log(result);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值