欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js中的reduce()函数讲解

程序员文章站 2023-11-23 23:22:10
定义: reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。 案例 1.数组求和...

定义:

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。

js中的reduce()函数讲解

案例

1.数组求和

  // 1.数组求和
  var arr = [1,5,8,6,15,78,65,25,48,55]
  var sum = arr.reduce(function(total,currentvalue){
    return total+currentvalue;
  });
  console.log(sum);//306
  var eachsum = 0;
  arr.foreach(function(currentvalue){
    eachsum += currentvalue;
  })
  console.log(eachsum);//306

2.合并二维数组

  //2.合并二维数组
  var twoarr = [['mu','zi'],['dig','big'],['lucky','jiji']];
  var onearr = twoarr.reduce(function(total,currentvalue){
    // console.log(total)
    return total.concat(currentvalue);
  })
  console.log(onearr);//["mu", "zi", "dig", "big", "lucky", "jiji"]

3.统计一个数组中有多少个不重复的单词:

  //3.统计一个数组中有多少个不重复的单词:
  // 不用reduce时: 
  var arr = ["apple","orange","apple","orange","pear","orange"]; 
  function getwordcnt(){ 
    var obj = {}; 
    for(var i= 0, l = arr.length; i< l; i++){ 
      var item = arr[i]; 
      obj[item] = (obj[item] +1 ) || 1; 
    } 
    return obj; 
  }
  console.log(getwordcnt());//{apple: 2, orange: 3, pear: 1}
  // 用reduce时: 
  var arr = ["apple","orange","apple","orange","pear","orange"]; 
  function getwordcnt(){ 
    return arr.reduce(function(prev,next){ 
      prev[next] = (prev[next] + 1) || 1; 
      return prev; 
    },{}); 
  } 
  console.log(getwordcnt());//{apple: 2, orange: 3, pear: 1}

4.对reduce的理解:

reduce(callback,initiavalue)会传入两个变量,回调函数(callback)和初始值(initiavalue)。

假设函数有个传入参数,prev和next,index和array。 prev和next是你必须要了解的。

当没有传入初始值时,prev是从数组中第一个元素开始的,next是第二个函数。

但是当传入初始值(initiavalue)后,第一个prev将是initivalvalue,next将是数组中的第一个元素。

比如:

  // 4.对reduce的理解:
  var arr = ["apple","orange"]; 
  function nopassvalue(){ 
    return arr.reduce(function(prev,next){ 
      console.log("prev:",prev); 
      console.log("next:",next); 
      return prev; 
    }); 
  } 
  function passvalue(){ 
    return arr.reduce(function(prev,next){ 
      console.log("prev:",prev); 
      console.log("next:",next); 
      prev[next] = 1; 
      return prev; 
    },{});
  } 
  console.log("no additional parameter:",nopassvalue()); 
  console.log("----------------"); 
  console.log("with {} as an additional parameter:",passvalue()); 
  /*
  vm415673:4 prev: apple 
  vm415673:5 next: orange 
  vm415673:4 prev: apple 
  vm415673:5 next: orange 
  vm415673:19 no additional parameter: apple 
  vm415673:20 ---------------- 
  vm415673:13 prev: {} 
  vm415673:14 next: apple 
  vm415673:13 prev: {apple: 1} 
  vm415673:14 next: orange 
  vm415673:21 with {} as an additional parameter: {apple: 1, orange: 1}
  */

若有不足请多多指教!希望给您带来帮助!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接