实现数组reduce方法,数组reduce的用法

  实现数组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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: