😄 reduce 函数
!本篇文章过于久远,其中观点和内容可能已经不准确,请见谅!~
js 中一般很少用(至少之前我很少用到)的一个内置函数。
reduce 在数组上带有一个迭代值的遍历。接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,数组本身。
语法:
// lastReturn (上一次调用回调返回的值,或者是提供的初始值(initialValue))// currentValue (数组中当前被处理的元素)// index (当前元素在数组中的索引)// array (调用 reduce 的数组)// initialValue (作为第一次调用 callback 的第一个参数。)arr.reduce((lastReturn, currentValue, index, array) => nextReturn, initialValue)
最简单的应用就是累加:
([1, 2, 3, 4, 5]).reduce((sum, val) => sum + val, 0);
自带一个可以初始化的迭代值,所以不需要循环、不需要单独创建变量,所以代码非常简洁。类似的需要一个初始值的遍历,用 reduce 会很简洁,不仅仅是累加这种。
// 求数组最大值([1, 2, 3, 4, 5]).reduce((max, val) => Math.max(max, val), -Infinity);// 返回一个偶数新数组([1, 2, 3, 4, 5]).reduce((ary, val) => val % 2 === 0 && ary.push(val), []);// 数组转对象([1, 2, 3, 4, 5]).reduce((obj, val, index) => ((obj[index] = val), obj), {});// 二维数组转一维([[1, 2, 8], [3, 4, 9], [5, 6, 10]]).reduce((ary, val) => ary.concat(val), []);
以上的例子基本上都是需要一个初始值,然后迭代返回这个值的套路,reduce 非常适合这种场景。
统计班级里面各个年龄的人数:
感谢您的阅读,本文由 Ubug 版权所有。如若转载,请注明出处:Ubug(https://ubug.io/blog/reduce)