高阶函数
一个函数的参数为一个函数的时候,这种函数就叫做高级函数
- map()
- reduce()
- filter()
- sort()
map()
map(f(x))方法定义在JavaScript的Array中,数组调用map()方法可根据传入的函数得到一个新的数组.可以利用map改变数组或元素的类型
1 | { |
reduce()
reduce(f(x,y))也是Array中的方法,这个函数必须接受两个参数的函数,reduce(f(x,y))函数会首先将数组中的前两个元素传入f(x,y)得到计算结果后,会将这个结果与数组中的下一个元素继续作为f(x,y)的参数传入,以此类推知道最后获取一个结果(感觉有点类似递归)
1 | var arr = [1, 3, 5, 7, 9]; |
filter()
filter(f(x))用于过滤数组,会将数组的元素依次传入f(x)中作为参数,然后根据f(x)返回true还是false来决定保留还是丢弃元素
1 | var arr = [1, 2, 4, 5, 6, 9, 10, 15]; |
sort()
排序算法是程序中常用的算法,其核心是比较两个元素的大小.如果是数字则直接比较,但是比较字符串或者比较对象,直接比较数学的大小是没有意义的,因此比较的过程需要通过函数抽象出来.通常规定,对于两个元素x和y,如果我们认为x>y,则返回1,如果认为x==y,则返回0,如果x<y,则返回-1.
JavaScript的Array的sort()方法是根据ASCII码进行排序的
无法理解的结果:
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]
这是因为Array的sort()方法默认吧所有的元素转换成String再按照ASCII码的循序进行排序
解决办法:
sort()方法是一个高阶函数,它可以接收一个比较函数来实现自定义排序即sort(fun(x,y))
例
1 | var arr = [10, 20, 1, 2]; |
注:sort()方法会直接对Array修改,最后返回的结果仍是当前的Array
本笔记根据 廖雪峰老师的JavaScript 教程记录