underscorejs-reduce学习
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学习的更多相关文章
- 不学就吃亏的underscorejs类库学习示例 ——(集合篇)
underscorejs是一个很不错的类库,我的很多项目都引用了这个类库,的确可以带来很多方便. 记得我当初学的时候,看underscorejs的api是看的一知半解的,甚至不明白api里的conte ...
- Python 中的map和reduce学习笔记
map和reduce都是Python中的内置函数 map函数接受两个参数,第一个参数是函数,第二个参数是列表,将函数依次作用于列表中的元素,并返回一个元素 reduce同样以函数和列表作为参数,区别在 ...
- Array.reduce()学习
昨天遇到的一道题:1234567890 => 1,234,567,890 要求其实就是使用逗号做千分位将数字进行分隔. 当时没想到任何方法,但是以前看到过,印象很深刻,今天就找了一下. 看到其实 ...
- python-廖雪峰,map/reduce学习笔记
# _*_ coding:utf-8 _*_from functools import reduce def str2int(s): digits = {'0': 0, '1': 1, '2': 2, ...
- python的map,filter,reduce学习
python2,python3中map,filter,reduce区别: 1,在python2 中,map,filter,reduce函数是直接输出结果. 2,在python3中做了些修改,输出前需要 ...
- python 常用函数集合
1.常用函数 round() : 四舍五入 参数1:要处理的小数 参数2:可选,如果不加,就是不要小数,如果加,就是保留几位小数 abs() :绝对值 ...
- JavaScript学习笔记:数组reduce()和reduceRight()方法
很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...
- JavaScript学习笔记(十)——高阶函数之map,reduce,filter,sort
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- Hadoop学习笔记2 - 第一和第二个Map Reduce程序
转载请标注原链接http://www.cnblogs.com/xczyd/p/8608906.html 在Hdfs学习笔记1 - 使用Java API访问远程hdfs集群中,我们已经可以完成了访问hd ...
- Java8学习笔记(十一)--并发与非并发流下reduce比较
BinaryOperator<Integer> operator = (l, r) -> l + r; BiFunction<Integer, Integer, Integer ...
随机推荐
- 「Poetize9」礼物运送
3055: 礼物运送 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 18 Solved: 12[Submit][Status] Description ...
- 基于物联网操作系统HelloX的智慧家庭体系架构
基于物联网操作系统HelloX的智慧家庭体系架构 智慧家庭是物联网的一个分支应用,是一个被广泛认同的巨大IT市场空间.目前市场上已经有很多针对智慧家庭的产品或解决方案,但与移动互联网不同,智慧家庭至今 ...
- 网络流(最大流):POJ 1149 PIGS
PIGS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. 64-bit integer(整数) ...
- oracle常用命令总结
声明:本文为博主在做项目中用到的一些常用命令,请勿转载,只为保存. oracle常用命令总结 创建表空间: --create tablespace vms--datafile 'e:\vms.dbf' ...
- DTD与XSD的区别
DTD=类型定义(Documnet Type Definition) XSD=XML结构定义 ( XML Schemas Definition ) DTD 就相当于 XML 中的“词汇”和“语法”,不 ...
- 谁动了我的timer?——C#的垃圾回收和调试
先来看如下的一段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 using System; using System.Threading; publi ...
- Struts2接收参数的几种方式
一.用Action属性 在action里定义要接收的参数,并提供相应的set和get方法. 如: public class LoginAction extends ActionSupport { pr ...
- MYSQL 体系结构图
- 第四篇:R语言数据可视化之折线图、堆积图、堆积面积图
折线图简介 折线图通常用来对两个连续变量的依存关系进行可视化,其中横轴很多时候是时间轴. 但横轴也不一定是连续型变量,可以是有序的离散型变量. 绘制基本折线图 本例选用如下测试数据集: 绘制方法是首先 ...
- 模仿ios下的coverflow
Android高级图片滚动控件,编写3D版的图片轮播器 http://blog.csdn.net/guolin_blog/article/details/17482089 A cool Open So ...