JavaScript数组reduce()方法
将某个值减去数组中的每个元素:
var items = [5, 10, 15]; var reducer = function minus(minusSum, item) { return minusSum - item; } var total = items.reduce(reducer, 61); console.log(total); // 31
上例中初始值为number
类型,所以返回的结果也是number
类型的,如果我们想返回object类型的值,也可以传入object类型的初始值。
var items = [5, 10, 15]; var reducer = function minus(minusSum, item) { minusSum.sum = minusSum.sum - item; return minusSum; } var total = items.reduce(reducer, {sum: 61}); console.log(total); // {sum: 31}
以上两例都是reduce()
简单的用法。reduce()
是一个很强大的方法,我们还可以用它来处理更复杂的业务逻辑。
例如,求购物车中商品的总价,购物车数据如下:
var goodList = [ { good: 'paper', price: 12 }, { good: 'book', price: 58 }, { good: 'CD', price: 15 } ]
然后运用reduce()
方法可以轻松的获得所有商品的总价格:
var count = goodList.reduce(function(prev, cur) { return cur.price + prev; }, 0); console.log(count); // 85
如果用户有10元的优惠券的话,我们只需要将 -10作为初始值传入reduce()
方法中就可以了。
var count = goodList.reduce(function(prev, cur) { return cur.price + prev; }, -10); console.log(count); // 75
我们给例子增加一点难度,商城在搞促销,对商品有一定的折扣,我们应该如何求得商品的总价格呢?利用reduce
方法也可以很容易解决的。
var goodList = [ { good: 'paper', price: 12 }, { good: 'book', price: 58 }, { good: 'CD', price: 15 } ]; var dis = { paper: 0.5, book: 0.8, CD: 0.2 } var count = goodList.reduce(function(prev, cur) { return cur.price + prev; }, -10); var qcount = goodList.reduce(function(prev, cur) { return cur.price * dis[cur.good] + prev; }, 0); console.log(count, qcount); // 75 55.400000000000006
我们这里就忽略JS中的精度问题吧,因为这里主要讲解reduce()
方法的用法。
再举一个例子,如何求得一串字符串中每个字母出现的次数?如果我们不用reduce()
方法也可以实现的,
代码如下:
var arrString = 'fghffgaga'; var strArr = arrString.split(''); var rel = {}; var count = 1; for (var i = 0; i < strArr.length; i++) { for (var j = i + 1; j < strArr.length; j++) { if (strArr[i] == strArr[j]) { count++; strArr.splice(j, 1); j = j - 1; } } var qcount = count; count = 1; rel[strArr[i]] = qcount; } console.log(rel); // {f: 3, g: 3, h: 1, a: 2}
利用reduce()方法的代码如下:
var arrString = 'fghffgaga'; var rel = arrString.split('').reduce(function(res, cur) { res[cur] ? res[cur] ++ : res[cur] = 1 return res; }, {}) console.log(rel); // {f: 3, g: 3, h: 1, a: 2}
哈哈,利用reduce()
方法来处理的话,代码是不是简单了很多?
我们可以用reduce()
方法来对数组中的每个元素来做各种处理,将一种类型的数组转换成另一种类型的数组。
var arr = [1, 2].reduce(function(res, cur) { res.push(cur + ''); return res; }, []); console.log(arr); // ["1", "2"]
到此这篇关于JavaScript数组reduce()方法 的文章就介绍到这了,更多相关JS数组reduce()内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/Handsome_fan/article/details/81434113
相关文章
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源代码贴在下面: 复制代码 代码如下: <script type="text/javascript"> function Person(){}...2014-05-31
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 复制代码 代码如下: //element:需要添加新样式的元素,value:新的样式 function addClass(element, value ){ if (!element.className){ element.className = value; }else { newClassName = element.className; newClas...2014-05-31
- 在javascritp中,不一定只有对象方法的上下文中才有this, 全局函数调用和其他的几种不同的上下文中也有this指代。 它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下...2015-03-15
- 本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
- 有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗...2015-03-15
- 事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQue...2014-06-07
- 首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var resul...2015-11-08
- 这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 1、ActiveX向Javascript传参 复制代码 代码如下: <script language="javascript" for="objectname" event="fun1(arg)"> fun2(arg); </script> objectname为ActiveX控件名,通过<object>标签里的id属性设定,如下; 复制...2014-06-07
- Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
- 这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
- 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树: 通过可编程的对象模型,Java...2015-10-23
- Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息.JavaScript代码如下:function message(){ txt = "<p>浏览器代码名: " + navigator.appCodeName + "</p>";txt+= "<p>...2015-11-24
- 下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <?php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
- 虽然ES6都还没真正发布,但已经有用ES6重写的程序了,各种关于ES789的提议已经开始了,这你敢信。潮流不是我等大众所能追赶的。潮流虽然太快,但我们不停下学习的步伐,就不会被潮流丢下的,下面来领略下ES6中新特性,一堵新生代JS...2015-11-24
- 神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07