详解JavaScript中数组的reduce方法

介绍

我们先来看看这个方法的官方概述:reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。

你一定也和我一样看的有点迷糊,其实reduce接收的就是一个回调函数,去调用数组里的每一项,直到数组结束。

我们来举个例子大家就很明白了。

假设我有一串数组,数组里放的全是数字,我要算出这些数字的总和是多少。正常情况下我们会循环,然后一个个加,有了reduce就不用那么麻烦了,只用一行代码。

?
1
var total = [0,1,2,3,4].reduce((a, b)=>a + b); //10

这个方法是如何工作的呢?

reduce接受一个函数,函数有四个参数,分别是:

     1、上一次的值;

     2、当前值;

     3、当前值的索引;

     4、数组;

我们还是以上面那个数组为例,把这几个参数打印出来看看:

?
1
2
3
[0, 1, 2, 3, 4].reduce( function (previousValue, currentValue, index, array){
  return previousValue + currentValue;
});

得到的结果是:

分析一下这个结果,这个回调函数共调用了4次,因为第一次没有previousValue,所以直接从数组的第二项开始,一只调用到数组结束。

reduce还有第二个参数,我们可以把这个参数作为第一次调用callback时的第一个参数,上面这个例子因为没有第二个参数,所以直接从数组的第二项开始,如果我们给了第二个参数为5,那么结果就是这样的:

?
1
2
3
[0, 1, 2, 3, 4].reduce( function (previousValue, currentValue, index, array){
  return previousValue + currentValue;
},5);

第一次调用的previousValue的值就用传入的第二个参数代替,函数被调用了5次,也就是数组的length

reduce可以帮助我们轻松的完成很多事,除了累加,还有扁平化一个二维数组:

?
1
2
3
4
var flattened = [[0, 1], [2, 3], [4, 5]].reduce( function (a, b) {
  return a.concat(b);
}, []);
// flattened == [0, 1, 2, 3, 4, 5]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript数组方法reduce()是用于对数组的元素进行累积计算的方法。它接受一个回调函数作为参数,该回调函数可以定义两个参数:累积器和当前值。reduce()方法遍历数组的所有元素,并将每个元素传递给回调函数进行累积计算。最后,它返回一个累积的结果。 在引用的示例,我们可以看到使用reduce()方法来计算数组的和和乘积。通过传递一个回调函数给reduce()方法,在每次迭代将上一个值与当前值相加或相乘,最终得到累积的和和乘积。 需要注意的是,如果数组是空的,使用reduce()方法会报错。如引用所示,对于空数组reduce()方法需要传入一个初始值作为累积器的初始值,否则会抛出"TypeError: Reduce of empty array with no initial value"的错误。 最后,reduce()方法的语法是array.reduce(function(total, currentValue, currentIndex, arr), initialValue)。其,total是累积器的初始值或上一次回调函数的返回值,currentValue是当前元素的值,currentIndex是当前元素的索引,arr是原始数组。initialValue是可选的,用于设置累积器的初始值,如果不传递该参数,则默认使用数组的第一个元素作为初始值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [JavaScript数组reduce()方法详解及奇淫技巧](https://blog.csdn.net/saucxs/article/details/91045557)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [JS数组reduce()方法详解](https://blog.csdn.net/weixin_47619284/article/details/125921346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值