实现数组reduce方法,数组reduce的用法
这篇文章带给你一些关于javascript的知识。reduce是数组原型对象上的一个方法,它可以帮助我们操纵数组。本文将和大家分享JavaScript中array reduce的四种用法,希望对你有所帮助。
【相关推荐:javascript视频教程,web前端】
前言
今天请让我详细介绍一下这个方法。希望对你有帮助。
这是reduce的基本用法:
var arr=[1,2,3];
功能缩减器(parmar1、parmar2){
}
Arr.reduce (reduce) reduce是数组原型对象上的一个方法,可以帮助我们操纵数组。它以另一个函数作为它的参数,可以称为reducer。
减速器有两个参数。第一个参数param1是上次减速器运行的结果。如果这是第一次运行reducer,param1的默认值是数组的第一个元素的值。
reduce方法遍历数组中的每个元素,就像for循环一样。并将循环中的当前值作为参数2。
遍历完数组后,reduce将返回最后一个reducer计算的结果。
让我们看一个详细的例子。
var arr=[a , b , c , d , e ];
函数add(x,y) {
返回x y;
}
arr.reduce(添加)
接下来,我们来探究一下上面的代码是如何执行的。
在这段代码中,reducer被添加。
首先,由于我们是第一次执行add,所以会将数组中的第一个元素‘A’作为add的第一个参数,然后循环会从数组中的第二个元素‘B’开始。这一次,‘b’是add的第二个参数。
第一次计算后,我们得到结果‘ab’。该结果将被缓存,并在下一次加法计算中用作param1。同时,数组中的第三个参数“c”将用作add的param2。
类似地,reduce将继续遍历数组中的元素,将 abc 和 d 作为add的参数运行。
最后,遍历完数组中的最后一个元素后,返回计算结果。
现在我们有了结果:‘abcde’。
所以,我们可以看到reduce也是一种遍历数组的方法!它依次获取数组中每个元素的值,并执行reducer函数。
但是我们可以看到上面的循环并没有那种和谐的美。因为我们取数组的第一个元素,即‘a’,作为初始param1,然后循环从数组的第二个元素获取param2。
实际上,我们可以将reduce中的第二个参数指定为reduce函数的param1的初始值,这样param2就会从数组的第一个元素开始循环获取。
代码如下:
var arr=[a , b , c , d , e ];
函数add(x,y) {
返回x y;
}
arr.reduce(加, s )
这一次,我们第一次调用reducer时,用‘s’作为param1,然后从第一个元素开始依次遍历数组。
所以我们可以使用这个语法来重写我们的第一个代码片段。
var arr=[a , b , c , d , e ];
函数add(x,y) {
返回x y;
}
Arr.reduce(add,)接下来我们将进入实际编程章节,体验reduce的强大威力。
1、累加和累积乘法
如果我们想得到数组中所有元素的和,你会怎么做?
一般来说,您可能会这样写:
函数累加(arr) {
设sum=0;
for(设I=0;长度;i ) {
sum=sum arr[I];
}
返回总和;
}当然你也可以有其他的写法,但是只要用for循环,代码就会显得多余。
那么我们来看看上面的累加函数是做什么的:
将初始sum设置为零以取出数组中的第一个元素,并将上一步的结果求和以依次取出数组中的其他元素。我们可以看到,当我们用文字描述上述步骤时,很明显符合reduce的用法。所以我们可以用reduce重写上面的代码:
函数累加(arr) {
函数缩减器(x,y) {
返回x y
}
return arr.reduce(reducer,0);
}如果你习惯使用箭头函数,上面的代码看起来会更简洁:
函数累加(arr) {
return arr.reduce((x,y)=x y,0);
}一行代码就搞定了!
当然,累积乘法和累加是完全一样的:
函数乘法(arr) {
return arr.reduce((x,y)=x * y,1);
}很多时候我们在求和的时候需要加上一个权重,这样更能体现reduce的优雅。
常数分数=[
{分数:90,主题: HTML ,权重:0.2 },
{分数:95,主题: CSS ,权重:0.3 },
{分数:85,主题:“JavaScript”,权重:0.5 }
];
const result=scores.reduce((x,y)=x y.score * y.weight,0);//89
2、获取一个数组的最大值和最小值
如果想得到一个数组的最大值和最小值,可以这样写:
函数最大值(arr){
设max=arr[0];
为了(让我们逮捕)
if(ele max) {
max=ele
}
}
返回max
}这个和之前一样。如果我们使用reduce,我们可以在一行代码中完成。
设arr=[3.24,2.78,999];
arr.reduce((x,y)=Math.max(x,y));
arr.reduce((x,y)=Math.min(x,y));
3、计算数组中元素出现的频率
我们经常需要计算数组中每个元素出现的次数。reduce方法可以帮助我们实现这个目标。
函数countFrequency(arr) {
return arr . reduce(function(result,ele){
//判断这个元素以前是否被计数过
if (result.get(ele)!=未定义){
/**
*如果此元素之前已被计算过,
*将其出现的频率增加1
*/
结果集(ele,result.get(ele) 1)
}否则{
/**
*如果这个元素以前没有被计算过,
*将其出现的频率设置为1
*/
result.set(ele,1);
}
返回结果;
},new Map());
}注意我们用map对象而不是object来存储统计的频率,因为数组中的元素可能是object类型,而object的key只能是string或symbol类型。
这里有两个例子:
同样,如果要统计字符串中每个字符的出现频率,可以先将字符串转换成字符数组,然后按照上面的方法进行。
设str= helloworld
str.split(“”)。reduce((result,currentChar)={
结果[currentChar]?result[current char]:result[current char]=1;
返回结果;
}, {})
因为字符类型可以作为对象的键,所以这里不使用Map。
4、多个数组的展平
函数Flat(arr=[]) {
return arr.reduce((t,v)=t.concat(Array.isArray(v)?平(v) : v),[])
}
通过reduce依次访问数组中的每个元素。如果发现元素还是数组,我们就递归调用flat方法。
【相关推荐:javascript视频教程,web前端】以上是JavaScript array reduce()方法的应用实例细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。