JavaScript高阶函数
JavaScript高阶函数实现更高效的封装,包括数据对象的枚举处理、排序、过滤,使我们写的代码更加高效简洁,结合ES6语法,在MV*框架编程中尤为明显。
1.map
map在计科专业词汇中有“映射”的意思,顾名思义,传入一个函数对调用该方法的数据进行枚举处理。
参数
currentValue: callback 数组中正在处理的当前元素
index可选: callback 数组中正在处理的当前元素的索引
array可选: callback map方法被调用的数组
1 | //对象Oject示例 |
2.reduce
reduce()方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算。
参数
accumulator: 累加器累加回调的返回值;它是上一次调用回调时返回的累积值或初始的第一项。
currentValue: 数组中正在处理的元素
currentIndex可选: 数组中正在处理的当前元素的索引。 如果提供了initialValue,则索引号为0,否则为索引为1
array可选: 调用reduce的数组
1 | var arr = [1,3,8,9]; |
3.filter
filter()方法创建一个新数组,它用于把Array的某些元素过滤掉,然后返回剩下的元素
参数
currentValue: 数组中正在处理的元素
currentIndex可选: 数组中正在处理的当前元素的索引
array可选: 调用filter的数组
1 | var arr = [1,3,6,8,9]; |
4.sort
sort()方法创建一个新的排序结果,包括正序,倒序,直接使用该方法可能会出错
参数
compareFunction可选: 用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序
1 | // 出错示例 |
What? 上述示例让人丈二和尚,根据MDN web docs上一段描述:排序不一定是稳定的。默认排序顺序是根据字符串Unicode码点。
可以知道,sort()方法默认把所有元素先转换为String再排序,结果’10’排在了’2’的前面,因为字符’1’比字符’2’的ASCII码小。
1 | // 对象示例 |