海纳百川,有容乃大

定义:

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

案例:

  1. 计算数组总和:

    var num = [1,2,3,4,5];
    var res = num.reduce(function(total,num){
    return total+num;
    //return total + Math.round(num);//对数组元素四舍五入并计算总和
    },0);
    console.log(res);//
    //num.reduce((total,num) => total += num, 0);
    //没有初始值initialValue(即上面例子中的0),当数组为0时会抛出异常提示reduce函数没有初始值,所以为兼容性一般加上initialValue
  2. 合并二维数组
    var red = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
    return a.concat(b);
    }, []);
    console.log(red)
    VM291:4 (6) [0, 1, 2, 3, 4, 5]
  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());
    VM3704:14 {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());
    VM3704:14 {apple: 2, orange: 3, pear: 1}

理解:

reduce(callback,initialValue)会传入两个参数,回调函数(callback)和初始值(initialValue)。当没有传入初始值时,prev是从数组中第一个元素开始的,next是数组的第二个元素;当传入初始值(initialValue)后,第一个prev将是initialValue,next将是数组中的第一个元素。

例如:

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());

运行结果为:

文章转载自:https://www.cnblogs.com/mafeng/p/10249887.html

JS中的reduce函数的更多相关文章

  1. js中的reduce()函数

    1. 首先看下语法如下 2 . 写了个demo如下 var fa = [1,2,3,4] function red(a, b) { console.log(arguments); return a + ...

  2. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

  3. underscore.js中的节流函数debounce及trottle

    函数节流   throttle and debounce的相关总结及想法 一开始函数节流的使用场景是:放止一个按钮多次点击多次触发一个功能函数,所以做了一个clearTimeout setTimeou ...

  4. js中如何在一个函数里面执行另一个函数

    1.js中如何在函数a里面执行函数b function a(参数c){ b(); } function b(参数c){ } 方法2: <script type="text/javasc ...

  5. JavaScript -- 时光流逝(七):js中的全局函数

    JavaScript -- 知识点回顾篇(七):js中的全局函数 全局函数可用于所有内建的 JavaScript 对象. (1) encodeURI():把字符串编码为 URI. <script ...

  6. js中的匿名函数和匿名自执行函数

    1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景:   <input type="button" value="点击" id ...

  7. JS中关于把函数作为另一函数的参数的几点小总结

    //JS中关于把函数作为函数的参数来传递的问题的小总结//第一,最简单的形式无参函数,直接形式函数的函数名放到括号中,再在执行部分这个函数即可.//当然调用时要穿另一个真正的定义好的函数/*funct ...

  8. js中的Generators函数

    js中的Generators函数 generator一般操作 generator函数的作用就是函数体分段执行,yield表示分隔点 function *test() { console.log(1); ...

  9. JS中的回调函数实例浅析

    本文实例讲述了JS中的回调函数.分享给大家供大家参考,具体如下: 在说回调函数之前,不妨先看一段代码,相信有点js基础的同学都能明白他的含义: ? 1 2 3 document.getElementB ...

随机推荐

  1. sublime text支持gbk编码

    sublime text支持gbk编码分两步完成 1.安装Package Control.打开Sublime Text,按Ctrl + ~打开控制台,在 https://packagecontrol. ...

  2. 启动模式:uefi, legacy,以及GRUB命令使用

    机器启动模式:uefi, legacy 设置入口:BIOS:boot mode 磁盘分区表格式: gpt uefi所使用(此种模式下,grub只能识别gpt格式的boot引导项) mbr legacy ...

  3. rm 或者ls 报Argument list too long

    一个文件夹下面碎文件太多,rm 或者 ls的时候报 Argument list too long 解决办法: find /tmp -type d -name "*-*-" -del ...

  4. 对promise的研究1

    通过看阮一峰老师的文章写出来的特此注明 1.Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其 ...

  5. php array_search()函数 语法

    php array_search()函数 语法 作用:在数组中搜索某个键值,并返回对应的键名.dd马达生产厂家 语法:array_search(value,array,strict) 参数: 参数 描 ...

  6. java单双引号转义问题

    JavaScript代码:var str = '<a href="javascript:;" onclick="visaDetail(\'1\',' + value ...

  7. 28 August

    单调队列复习. 投资 (invest) 给定一带符号整数数列,求长度为 \([s, e]\) 的子区间的和的最大值.(最大子段和) 降二维为一维,for循环枚举区间右端点.预处理前缀和,问题转化为找到 ...

  8. 转载:TypeError: Cannot read property 'compilation' of undefined vue 打包运行npm run build 报错

    转载自:https://www.jianshu.com/p/3f8f60e01797 运行npm run build打包时,报错如下:   我的package.json如下: { ... " ...

  9. jQuery FileUpload doesn't trigger 'done'

     https://stackoverflow.com/questions/14674999/jquery-fileupload-doesnt-trigger-done   If your server ...

  10. 洛谷P1982 小朋友的数字

    题目传送门 这个题的题目有点长,我们先来分析一波. 首先,这个题目中提到了以下几个量 1.最直接的就是每个小盆友手上的数字,这是题目给你的 2.每个小盆友的特征值 题目中给的定义是:每个小朋友的特征值 ...