首页 > 编程 > JavaScript > 正文

js中的reduce()函数讲解

2019-11-19 12:15:56
字体:
来源:转载
供稿:网友

定义:

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}  */

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

总结

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表