简介
ECMAScript 2019 中新增了一个方法 Array.prototype.reduceRight()
,这个方法和 Array.prototype.reduce()
方法类似,不同的是它是从数组的末尾开始遍历,而 reduce()
则是从数组的开头开始遍历。这个方法的主要作用是将一个数组中的多个元素合并为一个值,其返回值就是这个合并后的值。
如何使用
基本用法
reduceRight()
方法使用起来非常简单,其基本格式如下:
array.reduceRight(callback[, initialValue])
其中,array
是要操作的数组,callback
是回调函数,而 initialValue
是初始值(可选)。回调函数接受四个参数:上一个值(从右向左遍历的值),当前值,当前值的下标,以及整个数组。
比如下面这个例子,我们想要对数组 [1, 2, 3, 4]
进行从右向左的求和操作:
const numbers = [1, 2, 3, 4] const sum = numbers.reduceRight((prev, curr) => prev + curr, 0) console.log(sum) // 10
在这个例子中,初始值为 0,回调函数接受两个参数 prev
和 curr
,分别代表上一个值和当前值,我们最终返回的是它们的和。
实现复杂的数组操作
reduceRight()
方法实际上可以实现很多复杂的数组操作,其中包括更改或转换数组、查找数组中的特定值或对象等等。下面我们将通过一些示例来探讨如何使用 reduceRight()
方法来实现这些操作。
转换数组
我们可以利用 reduceRight()
方法来将一个数组中的元素全部转换为另外一种类型的元素,比如将一个字符串数组中的所有字符串首字母大写:
const words = ['apple', 'banana', 'pear'] const capitalizedWords = words.reduceRight((acc, curr) => { return [curr.charAt(0).toUpperCase() + curr.slice(1), ...acc] }, []) console.log(capitalizedWords) // [ 'Pear', 'Banana', 'Apple' ]
在这个示例中,我们创建了一个空数组 []
作为初始值,回调函数接受两个参数 acc
和 curr
,分别代表累加器和当前值。我们通过字符串的 charAt()
和 slice()
方法来将每个字符串的首字母大写,并使用 ES6 的扩展运算符以逆序的方式将元素添加到累加器中。
查找数组中的特定值
我们可以使用 reduceRight()
方法来查找数组中的特定值或对象。比如在一个包含对象的数组中查找第一个满足特定条件的对象:
-- -------------------- ---- ------- ----- ------ - - - ----- ------- ---- -- -- - ----- ------- ---- -- -- - ----- ------- ---- -- -- - ----- ------ ---- -- - - ----- ------ - ------------------------ ----- -- - -- --------- - -- -- ----- - ------ ---- - ------ --- -- ----- ------------------- -- - ----- ------- ---- -- -
在这个示例中,我们遍历了人员数组并使用回调函数来查找第一个年龄小于 25 岁的人员。我们首先设置初始值为 null
(表示找不到),然后通过检查每个人员的 age
属性来找到满足条件的第一个人员,并将其返回。
将数组转换为对象
我们可以使用 reduceRight()
方法来将一个数组转换为对象,其中数组中的元素作为对象的键或值。下面这个示例将一个数组中的元素转换为一个对象,其中元素为键、元素的索引为值:
const fruits = ['apple', 'banana', 'pear'] const result = fruits.reduceRight((obj, curr, index) => { obj[curr] = index return obj }, {}) console.log(result) // { 'pear': 0, 'banana': 1, 'apple': 2 }
在这个示例中,我们首先创建了一个空对象 {}
作为初始值。回调函数接受三个参数 obj
、curr
和 index
,分别代表累加器、当前值和当前值的索引。我们将当前值 curr
作为对象的键,将索引 index
作为值,并将其添加到累加器中。
结论
reduceRight()
方法可以用于执行复杂的数组操作。我们可以使用它实现各种操作,包括将数组转换为对象、查找特定的对象、将数组的所有元素转换为新的元素类型等等。同时,需要记住的是,对于数组中的大部分操作,我们并不需要使用 reduceRight()
方法;通常情况下,使用 map()
、filter()
、some()
、every()
等方法会更加方便和简单。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67160ba5ad1e889fe21a659b