/*
* 编程范式:命令式编程/声明式编程 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
* 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);
高阶函数基础知识
于 2021-12-23 14:50:37 首次发布