JS数组的reduce的妙用

本文详细介绍了JavaScript数组的reduce方法,通过实例展示了如何利用reduce进行累加、查找最大值、过滤和映射等操作。reduce的优势在于其灵活性,能够将数组转换为任意所需的数据结构。此外,还提供了一个复杂的例子,演示了如何使用reduce实现数组的分组功能。
摘要由CSDN通过智能技术生成

JS数组的reduce的妙用


reduce是减少; 缩小的意思。
更合适的编程术语翻译应该是:归一,归并。意思是将数组中的数据,通过某种计算得到一个归并的结果。
比如:将一个数组中所有的值累加,得到它们的和。

reduce的运行示意图
其中的①执行一次,②③④会根据数组元素循环执行。

运行一个reduce函数,需要准备的数据是:

  1. 需要处理的数组(如,准备求和的数组)
let arr = [1, 2, 3, 4, 5, 6]
  1. 初始的结果(如,数字0)
let result = 0
  1. 一个计算函数,可以将上次计算得到的结果,和当前元素计算得到新结果的函数。

(lastResult, item) => {
	return lastResult + item;
}

reduce函数首先会将0赋值给初始结果。
然后挨个取出元素,去与计算结果参与计算(lastResult + item),再将新的结果返回。
当所有元素计算完毕时,reduce返回最后一次的结算结果。

let arr = [1, 2, 3, 4, 5, 6]
let result = arr.reduce((lastResult, item) => {
	return lastResult + item;
}, 0);

console.log('result: ', result)

由于reduce函数会对数组进行循环操作,所以reduce函数可以对js数组的其他循环操作进行替换,如:forEach, filter, map 。
比如找到数组中最大的值:

let arr = [1, 2, 3, 4, 5, 6]
let result = arr.reduce((lastResult, item) => {
	if (item > lastResult) {
		return item;
	}
	return lastResult;
}, 0);

console.log('result: ', result)

比如过滤掉数组中小于3的元素,得到一个新的数组,类似filter。

let arr = [1, 2, 3, 4, 5, 6]
let result = arr.reduce((lastResult, item) => {
	if (item > 3) {
		lastResult.push(item);
	}
	return lastResult;
}, []);

console.log('result: ', result)

比如将数组中的所有元素+1得到新的数组,得到一个新的数组,类似map。

let arr = [1, 2, 3, 4, 5, 6]
let result = arr.reduce((lastResult, item) => {
	lastResult.push(item + 1);
	return lastResult;
}, []);

console.log('result: ', result)

reduce的方便之处在于,它可以将数组转化为任何你想要的数据,这一点是其他的数组操作函数不具备的。
我们来一个复杂一点的例子,对数组进行分组操作。

let arr = [1, 2, 3, 4, 5, 6]
let result = arr.reduce((lastResult, item) => {
	if (item % 2 == 0) {
		lastResult.even.push(item);
	} else {
		lastResult.odd.push(item);
	}
	return lastResult;
}, {
	odd: [],
	even: [],
});
console.log('result: ', result)

输出结果:

result:  { odd: [ 1, 3, 5 ], even: [ 2, 4, 6 ] }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值