大家好,欢迎来到IT知识分享网。
reduce 是 JavaScript 中数组的一个高阶函数,它可以用于在数组上执行一个归并操作(这里 reduce 的意思就是归并)。开发中常用而且很好用,但是理解并没有那么简单。尤其对迭代器不熟悉的同学。以下将一步步的通过例子,来吃透 reduce 的使用。
语法如下:
array.reduce(function(accumulator, currentValue, currentIndex, array) { // ... }, initialValue);
accumulator 是上一次计算后的结果
currentValue 是当前元素的值
currentIndex 是当前元素的索引
array 是原始数组
initialValue 是一个可选的初始值。
初始值的作用是为了初始化 accumulator。如果省略了初始值,那么 reduce() 第一次调用传入的 accumulator 将是数组的第一个元素,currentValue 将是数组的第二个元素。
摸透参数
先通过例子来演示:
var nums=[1,2,3,4,5,6]; var newNym=nums.reduce((accumulator,currentValue,currentIndex,array)=>{ console.log("acc="+accumulator); console.log("curr="+currentValue); console.log("currentIndex="+currentIndex); console.log(array) },0);
结果是:
initialValue设置了初始值为 0, accumulator 第一次为0.
如果不设置 initialValue
代码修改为这样:
var nums=[1,2,3,4,5,6]; var newNym=nums.reduce((accumulator,currentValue,currentIndex,array)=>{ console.log("acc="+accumulator); console.log("curr="+currentValue); //console.log("currentIndex="+currentIndex); // console.log(array) });
acc 的初始值为第一个元素值。
将数组修改为 var nums=[8,2,3,4,5,6]; 效果会更明显。
不设置初始值
应用示例
做累加
initialValue 设置为数组,迭代accumulator 是数组。
数组转换
如果没有 return accumulator,第一项是数组,后续就 undefined
对象转换
现在设置为 对象。
var nums=[8,2,3,4,5,6]; var leter=["a","b","c","d","e","f"]; var arr=[]; var newNym=nums.reduce((accumulator,currentValue,currentIndex,array)=>{ console.log("acc="+typeof(accumulator)+"类型是数组"+Array.isArray(accumulator)); console.log("curr="+currentValue); //console.log("currentIndex="+currentIndex); //console.log(array) accumulator={ letter: leter[currentIndex], index:nums[currentIndex] }; arr.push(accumulator); return arr; },{}); console.log(newNym)
结果:
再来一个例子
const fruits = ['apple', 'banana', 'apple', 'orange', 'banana']; const fruitCount = fruits.reduce((accumulator, currentValue) => { if (accumulator[currentValue]) { accumulator[currentValue]++; } else { accumulator[currentValue] = 1; } return accumulator; }, {}); console.log(fruitCount); // 输出 {apple: 2, banana: 2, orange: 1}
initialValue 这个参数可以省略,但实际使用中,意义很大。
在来一个例子,结束这个学习之旅:
const words = ['I', 'love', 'programming']; const sentence = words.reduce((accumulator, currentValue, currentIndex, array) => { if (currentIndex === array.length - 1) { return accumulator + currentValue + '.'; } else { return accumulator + currentValue + ' '; } }, ''); console.log(sentence); // 输出 "I love programming."
主要应用场景
reduce() 方法的主要应用场景包括:
- 对数组进行求和、求平均数、求最大值、求最小值等归约操作。
- 将数组中的各个元素转换成另一种类型的值,例如将数组中的字符串进行拼接。
- 对数组进行分组、去重、排除等操作,例如统计数组中每个元素出现的次数。
- 在函数式编程中,reduce() 方法经常用于实现柯里化(currying)、偏函数(partial function)等功能。
需要注意的是,reduce() 方法通常比普通循环代码更简洁、可读性更强,但也可能不太容易理解,因此在使用时要根据实际情况进行权衡。此外,由于 reduce() 方法是一个高阶函数,因此如果数组较大的话,使用 reduce() 方法可能会带来一定的性能开销。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/89759.html