2.3 reduce

2.3.1 语法:

_.reduce(list, iteratee, [memo], [context])

2.3.2 说明:

reduce方法把list中元素归结为一个单独的数值。

  • list可以为数组,对象,字符串和arguments
  • iteratee 会传第四个参数(memo, element, index, list)或(memo, value, key, list)
  • iteratee 需要有返回值
  • memo是函数的初始值
  • context可以改变iteratee内部的this

2.3.3 代码示例:

示例一:reduce可以操作数组和对象等集合

var sum1 = _.reduce(['1', '2', '3'], function (memo, element) {
return memo + element;
});
var sum2 = _.reduce({
a: 1,
b: 2,
c: 3
}, function (memo, element) {
return memo + element;
});
console.log(sum1); //=> String 123
console.log(sum2); //=> Number 6

示例二:iteratee的参数

iteratee里的参数比_.each和_.map多了一个memo。

如果外面没传memo,那么list的第一个值传为memo,并会少循环一次。

_.reduce([1, 2, 3], function (memo, element, index, list) {
//只有两次
console.log(memo, element, index, list);
//=> 1 2 1 [1, 2, 3]
//=> 3 3 2 [1, 2, 3]
return memo + element;
}); _.reduce([1, 2, 3], function (memo, element, index, list) {
//三次
console.log(memo, element, index, list);
//=> 0 1 0 [1, 2, 3]
//=> 1 2 1 [1, 2, 3]
//=> 3 3 2 [1, 2, 3]
return memo + element;
}, 0);

示例三:iteratee 需要有返回值

var result = _.reduce([1, 2, 3], function (memo, element, index, list) {
/*return*/ memo + element; //不要忘记return
}, 0);
console.log(result);

示例四:设置初始值

var result = _.reduce([1, 2, 3], function (memo, element) {
return memo + element;
}, 10);
console.log(result); //=> Number 16

示例五:context可以改变iteratee内部的this

var res = _.reduce([1, 2], function (memo, element) {
console.log(this);
//=> Object {no: 10}
//=> Object {no: 10}
return memo + element + this.no;
}, 0, {no : 10});
console.log(res); //=> Number 23

2.3.4 _.inject和_.foldl是_.reduce的别名。

inject:注入。

fold:折叠,foldl即fold left

var arr1 = _.inject([1, 2, 3], function (memo, element) {
return memo + element;
});
console.log(arr1); //=> Number 6 var arr2 = _.foldl([1, 2, 3], function (memo, element) {
return memo + element;
});
console.log(arr2); //=> Number 6

2.3.5 拼接字符串

reduce方法很使在拼接字符串的时候使用。

var data = [{name: 'iori'}, {name: 'kyo'}];
var html = _.reduce(data, function(memo, element){
return memo + '<p>' + element.name + '</p>';
}, ''); //这个空字符串一定要传
console.log(html); //=> <p>iori</p><p>kyo</p>

gitbook地址:https://www.gitbook.com/book/niec-fe/underscorejs/details

underscorejs-reduce学习的更多相关文章

  1. 不学就吃亏的underscorejs类库学习示例 ——(集合篇)

    underscorejs是一个很不错的类库,我的很多项目都引用了这个类库,的确可以带来很多方便. 记得我当初学的时候,看underscorejs的api是看的一知半解的,甚至不明白api里的conte ...

  2. Python 中的map和reduce学习笔记

    map和reduce都是Python中的内置函数 map函数接受两个参数,第一个参数是函数,第二个参数是列表,将函数依次作用于列表中的元素,并返回一个元素 reduce同样以函数和列表作为参数,区别在 ...

  3. Array.reduce()学习

    昨天遇到的一道题:1234567890 => 1,234,567,890 要求其实就是使用逗号做千分位将数字进行分隔. 当时没想到任何方法,但是以前看到过,印象很深刻,今天就找了一下. 看到其实 ...

  4. python-廖雪峰,map/reduce学习笔记

    # _*_ coding:utf-8 _*_from functools import reduce def str2int(s): digits = {'0': 0, '1': 1, '2': 2, ...

  5. python的map,filter,reduce学习

    python2,python3中map,filter,reduce区别: 1,在python2 中,map,filter,reduce函数是直接输出结果. 2,在python3中做了些修改,输出前需要 ...

  6. python 常用函数集合

    1.常用函数     round() :  四舍五入         参数1:要处理的小数         参数2:可选,如果不加,就是不要小数,如果加,就是保留几位小数     abs() :绝对值 ...

  7. JavaScript学习笔记:数组reduce()和reduceRight()方法

    很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...

  8. JavaScript学习笔记(十)——高阶函数之map,reduce,filter,sort

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  9. Hadoop学习笔记2 - 第一和第二个Map Reduce程序

    转载请标注原链接http://www.cnblogs.com/xczyd/p/8608906.html 在Hdfs学习笔记1 - 使用Java API访问远程hdfs集群中,我们已经可以完成了访问hd ...

  10. Java8学习笔记(十一)--并发与非并发流下reduce比较

    BinaryOperator<Integer> operator = (l, r) -> l + r; BiFunction<Integer, Integer, Integer ...

随机推荐

  1. bzoj2789

    这种题目肯定是先把一个当做标准串根据标准串得出一个初始串是怎么排列的,然后求逆序对数就可以了但是因为有重复,我们不知道标准串中的一个数到底是由原来哪个字母交换来的但是我们可以猜,不难贪心得到对于标准串 ...

  2. BestCoder Round #51 (div.2)

    明显是无良心的数学round= = 1000 Zball in Tina Town #include<iostream> #include<cstdio> #include&l ...

  3. jquery 学习第一课之start

    1.$选取符 ( $ == jQuery ) (1) $("div").addClass("special");选取本页面中的所有<div>元素,然 ...

  4. CSS3中text-overflow支持以...代替超出文本

    CSS3中text-overflow支持以...代替超出文本. 1.div1:默认状态.超出文本默认显示在div外 2.div2:text-overflow:ellipsis; 使用text-over ...

  5. Unity Dx9 Occlusion Query plugin

    //Occlusion Unity plugin #include "UnityPluginInterface.h" #include <math.h>#include ...

  6. 调试中除了在URL上加时间戳外,如何避免js、css被返回304状态?

    在本地开发环境(nginx)中,经常遇到这样的情况:调试js时浏览器总是不载入已修改的js内容,而直接吐出了上次缓存的代码.   我曾经做过以下尝试: ctrl+F5 ctrl+F5+F5+F5+F5 ...

  7. PostgreSQL安装详细步骤(windows)

    原文地址:http://blog.chinaunix.net/uid-354915-id-3498734.html PostgreSQL安装:一.windows下安装过程安装介质:postgresql ...

  8. Mac下Intellij IDea发布Java Web项目详解三 新建Module

    准备工作1:新建第一个JavaWeb项目 Step4 添加两个module 4.1 右键[WebWorkSpace]-[New]-[Module] 4.2 重复 准备工作1:新建第一个JavaWeb项 ...

  9. SRM 399(1-250pt)

    DIV1 250pt 题意:给出一个size不超过50的数组a和整数n,求x,y,z使得|n - x*y*z|最小,且x,y,z均不再数组a中.若有多组xyz使得|n-x*y*z|最小,输出字典序最小 ...

  10. lightoj 1011 最大权重匹配或最大费用流

    由于暂时不会KM算法,只能用最大费用流来做了. 题目链接:http://lightoj.com/volume_showproblem.php?problem=1011 #include <cst ...