几个常用高阶函数(es6)


1.filter

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

需求:取出小于100的数

  1: //每次回调函数时自动填入形参n,第一次是10,第二次是20...
  2: //filter中回调函数必须返回一个boolean值
  3: //当返回true时,函数内部会自动将这次回调的n加入到新的数组中
  4: //当返回false时,就会过滤掉n
  5: let newNums = nums.filter(function (n) {
  6: // n小于100的结果就是true,大于等于就是false
  7:   return n < 100
  8: });
  9: console.log(newNums);
 10: // newNums=[10,20,40,50]

2.map

需求:将新的数组里面全部的数乘以2

  1: //相同的是回调函数必须返回值,返回的值替代n
  2: let newNums2 = newNums.map(function (n) {
  3:   return n*2
  4: });
  5:   console.log(newNums2);
  6: // newNums2=[20,40,80,100]


3.reduce

需求:求数组里面所有值的和

  1: // reduce将数组里面的所有内容汇合处理。
  2: // 第一个参数是上一次返回的值,第二个参数是这次使用的值
  3: // 将回调函数视为第一个参数,第二个参数(也就是0)是初始值
  4: let newNums3 = newNums2.reduce(function (preValue, n) {
  5:   return preValue + n
  6: }, 0);
  7: console.log(newNums3);
  8: // newNums3=240

最后可以一次复合写完最后的需求。

  1: let total = nums.filter(function (n) {
  2:   return n<100
  3: }).map(function (n) {
  4:   return n*2
  5: }).reduce(function (preValue, n) {
  6:   return preValue + n
  7: }, 0);
  8: console.log(total);

es6语法一句话写完。

  1: let total2 = nums.filter(n => n<100).map(n => n*2).reduce((pre, n) => pre+n);
  2:   console.log(total2);

在别的语言这几个函数也是类似的功能。

相关