Array.reduce(function(total,currentValue)) 累加器

13 篇文章 0 订阅

定义和用法

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

注意: reduce() 对于空数组是不会执行回调函数的。

语法

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

reduceRight( ) 

参数

参数描述
function(total,currentValue, index,arr)必需。用于执行每个数组元素的函数。
函数参数:
参数描述
total必需。初始值, 或者计算结束后的返回值。
currentValue必需。当前元素
currentIndex可选。当前元素的索引
arr可选。当前元素所属的数组对象。
initialValue可选。传递给函数的初始值

例子一: 累加器

<html>
<head>
<meta charset="utf-8">
</head>
<body>

<p>点击按钮计算数组元素相加后的总和。</p>
<button onclick="myFunction()">点我</button>

<p>数组元素总和: <span id="demo"></span></p>

<script>
var numbers = [65, 44, 12, 4];

function getSum(total, num) {
	alert(total)  //依次返回 65,109,121
	alert(num) //依次返回 44,12,4
    return total + num;
}
function myFunction(item) {
    document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}
</script>

</body>
</html>

执行结果:

例子二:遍历筛选

官方格式:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

简化和个人理解后的格式:array.reduce(function (total, num, index, thisArr) , initialValue)

total:函数执行完后返回的结果;

num:遍历到当前的元素;

index:当前元素的下标值;

thisArr: 使用该方法的当前数组;

initialValue: 可传递给函数的初始值;

例子目标:传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。

比如:函数传入 unite([1, 3, 2], [5, 2, 1, 4], [2, 1])  ,应返回结果 [1, 3, 2, [5], [4]];

比如:函数传入 unite([1, 3, 2], [1, [5]], [2, [4]]), 应该返回 [1, 3, 2, [5], [4]]。

方法:reduce 函数对数组中传入的元素有回调机制,可以利用其遍历元素的特点

function unite(arr1,arr2,arr3){
    var l=arguments.length;
    var arr=[];
    for(n=0;n<l;n++){
    arr=arr.concat(arguments[n]);
}
 
arr.reduce(getSum,0)
  
function getSum(total, num, index, thisArr) {
    for(i=0;i<thisArr.length;i++){
        if(arr[i]==num&&i>index){
            arr.splice(i,1) }
	    }
    }
    return arr;
}

unite([1, 3, 2], [5, 2, 1, 4], [2, 1]) //应返回 [1, 3, 2, [5], [4]]。

结论:reduce() 方法是遍历数组中的所有元素,并执行函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值