从零开始学HTML&&CSS&&JavaScript(四)——JavaScript 之reduce的三大用法

js之reduce的三大用法

reduce简介以及理解

必看:

reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)。
假设函数有个传入参数,prev和next,index和array。 Prev和next是你必须要了解的。
当没有传入初始值时,prev是从数组中第一个元素开始的,next是第二个函数。
但是当传入初始值(initiaValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素。

在下面的代码和页面的显示效果中大家着重理清逻辑以及原理

1.统计数组中每个元素的个数

js部分代码如下:

			//1.统计数组中每个元素的个数
			var maxe;
			var max;
			var mine;
			var min;
			var arrx = ['a', 'c', 'b', 'b', 'a', 'd', 'd', 'd'];
			var countarrs = arrx.reduce(function(allarrs,arrx) {
				//判断arrx是不是在之前的元素中已经出现过
				//已经出现过
				if(arrx in allarrs) {
					allarrs[arrx]++;//arrx作为key值、对应的value+1、代表计数一次
					console.log("in-- -- -- -- -- -- -- -- -- -- - ");
					console.log(allarrs);
					console.log(arrx); 
					console.log(allarrs[arrx]);
			        console.log("in -- -- -- -- -- -- -- -- -- --");
				}
				//没有出现过
				else {
					allarrs[arrx] = 1;//arrx作为新key值、并且对应的值为1
					console.log("not in-----------------------");
					console.log(allarrs);
					console.log(arrx);
					console.log(allarrs[arrx]);
					console.log("not in-----------------------");
				}
				return allarrs;//将allarrs返回到allarrs作为下一次运算是时的值
			}, {});//{}让第一次运行是allarrs是一个对象
			//运算结束后结果会到countarrs中
			console.log(countarrs);
			var keys=Object.keys(countarrs);//获取所有的key值,此时所有的key值都在keys这个数组中
			max=countarrs[keys[0]];
			min=countarrs[keys[0]];
			mine=keys[0];
			maxe=keys[0];
			//console.log(keys);
			for (var i=0;i<keys.length;i++) {
				if(max<countarrs[keys[i]]){
					max=countarrs[keys[i]];
					maxe=keys[i];
				}
				if(min>countarrs[keys[i]]){
					min=countarrs[keys[i]];
					mine=keys[i];
				}
				//console.log(countarrs[keys[i]]);
			}
			console.log("最少的元素是:"+mine);
			console.log("最少的元素的个数是:"+min);
			console.log("最多的元素是:"+maxe);
			console.log("最多的元素的个数是:"+max);

在下面的页面效果显示中大家仔细看allarrs、arrx、allarrs[arrx]等值的变化

在页面的运行效果如下:
在这里插入图片描述

2.数组求和

js代码如下:

			// 2.数组求和
			var arr = [1,5,8,6,15,78,65,25,48,55]
			var sum = arr.reduce(function(total,currentValue){
				console.log("---------start---------------");
				console.log(total);
				console.log(currentValue);
				console.log(total+currentValue);
				console.log("-------end------------------");
			  	return total+currentValue;
			});
			console.log(sum);//306
			var eachSum = 0;
			//用forEach循环得到累加的结果进行验证
			arr.forEach(function(currentValue){
			  	eachSum += currentValue;
			})
			console.log(eachSum);//306

页面上的代码效果如下:
在这里插入图片描述

3.合并二维数组

js主要代码如下:

//			3.合并二维数组
			var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']];
			var oneArr = twoArr.reduce(function(total,currentValue){
				console.log("---------start---------------");
			  	console.log(total);
				console.log(currentValue);
				console.log(total.concat(currentValue));
				console.log("---------end-----------------");
			  return total.concat(currentValue);
			})
			console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]

在页面上的代码运行效果如下:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值