reduce⽅法的实现
reduce⽅法的实现
reduce⽅法是⼀种归并数组的⽅法,它将从前往后遍历数组,并在所有数组元素的基础上构建⼀个返回值。reduce接收两个参数,第⼀个参数是对每个数组元素都会执⾏的回调函数,第⼆个参数是可选的初始值。
1 let array = [0, 1, 2, 3, 4];
duce((accumulator, currentValue, currentIndex, array) => accumulator + currentValue ); // 10
传递给reduce的回调函数接收四个参数:accumulator,currentValue,index,array。accumulator是累加器,如果reduce的第⼆个参数不存在,它将被初始化为数组的第⼀个元素,否则它将被初始化为reduce的第⼆个参数。之后,accumulator将保存每次调⽤回调函数所返回的结果,并在下⼀次调⽤回调函数时作为其参数。currentValue保存当前遍历的元素,index保存当前元素的索引,array表⽰被遍历的数组。在遍历完数组之后,reduce将返回accumulator的最终结果。
1// reduce⽅法的实现
2 Reduce = function (callBack, initialValue) {
3if (!((typeof callBack === "Function" || typeof callBack === "function") && this)) {
4throw new TypeError("The callback must be a function and the caller of reduce must not be null or undefined");
5 }
6
7// 获取调⽤reduce⽅法的数组
8 const array = Object(this);
9
10// 获取数组长度
11 const len = array.length >>> 0;
12
13// 声明累加器,当前值和当前索引
14 let accumulator, currentValue, currentIndex;
15
16// 当数组为空且没有提供初始值时应该报错,此时执⾏reduce⽅法没有意义
17if (!initialValue && len <= 0) {
18throw new Error("Reduce of empty array with no initial value");
19 }
typeof array20
21if (initialValue) {
22// 如果提供了初始值,则累加器被初始化为初始值
23 accumulator = initialValue;
24for (let i = 0; i < len; i++) {
25 currentValue = array[i]; currentIndex = i;
26 accumulator = callBack(accumulator, currentValue, currentIndex, array);
27 }
28 } else {
29// 如果没有提供初始值,则累加器被初始化为数组的第⼀个元素
30 accumulator = array[0];
31for (let i = 1; i < len; i++) {
32 currentValue = array[i]; currentIndex = i;
33 accumulator = callBack(accumulator, currentValue, currentIndex, array);
34 }
35 }
36
37return accumulator;
38 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论