首页 > 编程笔记 > JavaScript笔记 > JS数组
JS reduce()和reduceRight()方法:对数组元素进行迭代(累加)
使用 JavaScript 中的 reduce() 和 reduceRight() 方法可以对数组元素的值进行迭代(或者说累加)。
recude() 方法的返回值是通过最后一次调用回调函数获得的累积结果。
如果提供了参数 initialVaule,则 reduce() 方法会对数组中的每个元素调用一次 callbackfn 函数(按升序索引顺序);如果为提供 initialVaule,则 reduce() 方法会对从第 2 个元素开始的每个元素调用 callbackfn 函数。
回调函数的返回值在下一次调用回调函数时作为 previousValue 参数提供。最后一次调用回调函数获得的返回值为 recude() 方法的返回值。该方法不为数组中缺少的元素调用该回调函数。
回调函数的语法如下:
在第一次调用回调函数时,作为参数提供的值取决于 reduce() 方法是否具有 initialValue 参数。如果向 recude() 方法提供 initialValue,则 previousValue 参数为 initialValue,currentValue 参数是数组中第 1 个元素的值。
如果未提供 initialValue,则 previousValue 参数是数组中的第 1 个元素的值,currentValue 参数是数组中的第 2 个元素的值。
reduce() 方法
JavaScript 中的 reduce() 方法可对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。具体用法如下:array.reduce(callbackfn[, initialVaule]);
参数说明:- array:必需参数,一个数组对象。
- callbackfn:必需参数,一个接受最多四个参数的函数。对于数组中的每个元素,recude() 方法都会调用 callbackfn 函数一次。
- initialVaule:可选参数,如果指定 initialVaule,则它将用作初始值来启动累积。第一次调用 callbackfn 函数会将此值作为参数而非数组值提供。
recude() 方法的返回值是通过最后一次调用回调函数获得的累积结果。
如果提供了参数 initialVaule,则 reduce() 方法会对数组中的每个元素调用一次 callbackfn 函数(按升序索引顺序);如果为提供 initialVaule,则 reduce() 方法会对从第 2 个元素开始的每个元素调用 callbackfn 函数。
回调函数的返回值在下一次调用回调函数时作为 previousValue 参数提供。最后一次调用回调函数获得的返回值为 recude() 方法的返回值。该方法不为数组中缺少的元素调用该回调函数。
回调函数的语法如下:
function callbackfn(previousValue, currentVaule, currentIndex, array);
回调函数参数说明:- previousValue:通过上一次调用回调函数获得的值。如果向 reduce() 方法提供 initialValue,则在首次调用函数时,previousValue 为 initialValue。
- currentVaule:当前元素数组的值。
- currentIndex:当前数组元素的数字索引。
- array:包含该元素的数组对象。
在第一次调用回调函数时,作为参数提供的值取决于 reduce() 方法是否具有 initialValue 参数。如果向 recude() 方法提供 initialValue,则 previousValue 参数为 initialValue,currentValue 参数是数组中第 1 个元素的值。
如果未提供 initialValue,则 previousValue 参数是数组中的第 1 个元素的值,currentValue 参数是数组中的第 2 个元素的值。
示例1
下面示例演示将数组值连接成字符串,各个值用::
分隔开。由于未向 recude() 方法提供初始值,第一次调用回调函数时会将“abc”作为 previousValue 参数,并将“def”作为 currentValue参数。
function f(pre, curr) { return pre + ": :" + curr; } var a = ["abc", "def", 123, 456]; var r = a.recude(f); console.log(r); //abc::def::123::456
示例2
下面示例向数组中添加值。currentIndex 和 array 参数用于回调函数。function f(pre, curr, i, array) { var e = (array.length - 1) - i; var d = curr * Math.pow(10, e); return pre + d; } var a = [4,1,2,5]; var r = a.recude(f, 0); console.log(r); //4125
示例3
下面示例获取一个数组,该数组仅包含另一个数组中的介于 1 和 10 之间的值,提供给 recude() 方法的初始值是一个空数组。function f(pre, curr) { var next; if (curr >= 1 && curr <= 10) { next = pre.concat(curr); } else { next = pre; } return next; } var a1 = [20,1,-5,6,50,3]; var a = new Array(); var r = a1.recude(f, a); console.log(r); //1,6,3
recudeRight() 方法
JavaScript 中的 recudeRight() 方法可从右向左对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。具体用法如下:array1.reduceRight(callbackfn[, initialValue]);
该方法的语法和用法与 reduce() 方法大概相同,唯一不同的是,它是从数组右侧开始调用回调函数。如果提供了 initialValue,则 reduceRight() 方法会按降序索引顺序对数组中的每个元素调用一次 callbackfn 函数。如果未提供 initialValue,则 reduceRight() 方法会按降序索引顺序对每个元素(从倒数第 2 个元素开始)调用 callbackfn 函数。示例4
下面示例使用 reduceRight() 方法,以::
为分隔符,从右到左把数组元素的值连接在一起。
function f (pre, curr) { return pre + "::" + curr; } var a = ["abc", "def", 123, 456]; var r = a.recudeRight(f); console.log(r); //456::123::def::abc
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算