underscorejs-reduce学习
2016-01-25 10:07
567 查看
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
相关文章推荐
- JavaScript数据类型学习笔记
- js阿拉伯变成中文数字
- JS/JQ用法小總
- JavaScript JSON
- ExtJS表单之一个实例
- extJS 表单 Form的使用
- 初识Rest、JSR、JCP、JAX-RS及Jersey
- JavaScript 类型转换
- 9张思维导图学习Javascript
- 公历和农历转换的JS代码<转>
- 关于JavaScript中数组的清除
- JSON字符串转换成Map对象
- 第四章 介绍Extjs的formPanel (入门教程)
- js 获取元素标签的绝对定位位置
- 再谈Newtonsoft.Json高级用法
- 如果你使用上述这段12行的JavaScript代码,就可以能让firefox、chrome、safari浏览器崩溃,而且还能让iphone重启,安卓手机闪退!
- javascript深入理解js闭包
- Javascript 面向对象编程(一):封装
- js页面跳转整理
- 通过JS的事件处理取得radio的值