JavaScript高阶函数的使用

记一些笔记。关于三个高阶函数的使用。

零散笔记:用一种类似于foreach的语法书写for循环:

1
2
3
4
for (let i in this.books) {
// 此时,i仍是下标,但是这样写比普通的for简便一些
...
}
1
2
3
4
for (let i of this.books) {
// 此时,i变成了books中的每一项
...
}

高阶函数

啥叫高阶函数?参数也有函数的函数。比如filter,map,reduce。

(C#中的委托。。。)

filter中的回调函数有一个要求,必须返回一个bool值。当返回true时,函数内部会自动将这次回调的n加入到新的数组中。当返回false时,函数内部会过滤掉这次的n。n是回调函数的参数。用来按要求筛选数组里的数字时可以用这种做法。

1
2
3
let newNums = nums.filter(function(n) {
return n < 100;
});

map函数是把整个数组遍历一遍,然后可以按照自己定的规则变化数字。比如要把数组里的数字全都乘以2:

1
2
3
let newNums = nums.map(function(n) {
return n * 2;
});

reduce函数对数组中所有的内容进行汇总。需要传入两个参数,一个回调函数,一个变量。回调函数需要两个参数,一个代表前驱值(return回去的值),一个代表当前值(可能是一个复合类型)。传入的第二个参数代表第一个元素的前驱值。如果想要用这个函数做到求总和,可以把变量参数置为0,回调函数里面传入两个参数,然后return他俩相加。

1
2
3
let newNums = nums.reduce(function(prev, now) {
return prev + now;
},0);

把这些操作汇总起来可以写成一段代码,可以做到对数组筛选后批量处理再求汇总结果。

1
2
3
4
5
6
7
let ans = nums.filter(function(n) {
return n < 100;
}).map(function(n) {
return n * 2;
}.reduce(function(prev, n) {
return prev + n
}, 0);

其实,它们可以简化成一行:(使用了箭头函数)

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

使用它代替for循环写的代码可以提升可读性(我怎么感觉对于不懂这个语法的是降低可读性

不过确实可以少写很多东西。

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2018-2020 Shawn Zhou
  • Powered by Hexo Theme Ayer
  • PV: UV:

感谢打赏~

支付宝
微信