JavaScript Array Reduce用于数组求和
需求一
假设有一个数组,需要对其中的元素进行求和。
const numbers = [1, -1, 2, 3];
传统写法,使用for循环求和
const numbers = [1, -1, 2, 3];
let sum = 0;
for(let n of numbers)
sum += n;
console.log(sum); // 5
使用reduce求和
reduce()函数的第一个参数是一个callback function,这个function中有2个参数,accumulator相当于sum,currentValue 是当前循环中数组的元素值。
第二个参数是 accumulator 的初始值。
返回值是一个数值。
const sum = numbers.reduce((accumulator, currentValue) => {
console.log('a', accumulator);
console.log('c', currentValue);
return accumulator + currentValue;
}, 0);
console.log(sum); // 5
这其中发生了什么呢?
每次循环的结果是:
round 1 a = 0, c = 1 => a = 0+1 = 1
round 2 a = 1, c = -1 => a = 0
round 3 a = 0, c = 2 => a = 2
round 4 a = 2, c = 3 => a = 5
更简化的写法
也可以不给 accumulator 的初始值,那么它的初始值就是数组的第一个元素, 这样可以少一次循环。
const sum = numbers.reduce((accumulator, currentValue) => {
console.log('a', accumulator);
console.log('c', currentValue);
return accumulator + currentValue;
});
把箭头函数简化为一行
const sum = numbers.reduce(
(accumulator, currentValue) => accumulator + currentValue
);
console.log(sum);
需求二
假设有一个数组,其中的既有正数,又有负数,分别对正负数求和,同时返回求和结果。
const nums = [10, -12, 30, -1, -8, 0, 14, -33, 20];
同时返回结果,那么返回值应该是一个对象,其中包含正数之和、负数之和。
{
plus: 0,
minus: 0
}
完整解决方案:
const nums = [10, -12, 30, -1, -8, 0, 14, -33, 20];
function sumPlusMinus(arr) {
return arr.reduce((acc, currentValue) => (
{
plus: currentValue > 0 ? acc.plus + currentValue : acc.plus,
minus: currentValue < 0 ? acc.minus + currentValue : acc.minus
}
), { plus: 0, minus: 0 });
}
console.log(sumPlusMinus(nums));
JavaScript Array Reduce用于数组求和的更多相关文章
- reduce实现数组求和
对于实现数组求和,我们常用的思路是通过for.while,对数组进行迭代,依次将他们的值加起来,下面列举常用的两种方法 第一种: var arr = [1,2,3,4,5,6]; Array.prot ...
- Javascript刷题 》数组求和
计算给定数组 arr 中所有元素的总和 输入描述: 数组中的元素均为 Number 类型 输入例子: sum([ 1, 2, 3, 4 ]) 输出例子: 10 解题方法 1.定义一个变量,将前面的和后 ...
- JavaScript - Array对象,数组
1. 创建数组 方式1. new关键字 var arr = new Array(1, 2, 3); 方式2. 使用字面量创建数组对象 var arr = [1, 2, 3]; 2. 检测一个对象是否是 ...
- JavaScript学习笔记:数组reduce()和reduceRight()方法
很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...
- Javascript数组求和的方法总结 以及由斐波那契数列得到的启发
一次面试中,面试官要求用三种不同的Javascript方法进行一个数字数组的求和,当时思来想去只想到了使用循环这一种笨方法,因此面试比较失败,在这里总结了六种Javascript进行数组求和的方法,以 ...
- JavaScript Array 数组方法汇总
JavaScript Array 数组方法汇总 1. arr.push() 从后面添加元素,返回值为添加完后的数组的长度 var arr = [1,2,3,4,5] console.log(arr.p ...
- JavaScript Array(数组)对象
一,定义数组 数组对象用来在单独的变量名中存储一系列的值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, elem ...
- js 数组详解(javascript array)
Array Array 对象用于在单个的变量中存储多个值. 构造函数: 1) new Array(); 2) new Array(size); 3) new Array(element0, ...
- javascript中的稀疏数组(sparse array)和密集数组
学习underscore.js数组相关API的时候.遇到了sparse array这个东西,曾经没有接触过. 这里学习下什么是稀疏数组和密集数组. 什么是密集数组呢?在java和C语言中,数组是一片连 ...
随机推荐
- python时间 time模块和datetime模块
一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...
- 手机端css实现active伪类
今天遇到手机端的css中a标签的active不起作用,原本想循环a标签,给当前的a标签添加class来解决,可觉得有点儿小麻烦,经查资料了解到解决此问题,只需要添加一个touchstart的空事件即可 ...
- Python 正则表达式Ⅴ
正则表达式实例 字符匹配 字符类 特殊https://www.xuanhe.net/字符类
- (转)window.parent和window.opener区别
下面一段代码是关于window.parent和window.opener区别 来讲的,我们如果要用到iframe的值传到另一框架就要用到window.opener.document.getElemen ...
- netty实现客户端服务端心跳重连
前言: 公司的加密机调度系统一直使用的是http请求调度的方式去调度,但是会出现网络故障导致某个客户端或者服务端断线的情况,导致很多请求信息以及回执信息丢失的情况,接着我们抛弃了http的方式,改为T ...
- HDU1176-免费馅饼(DP)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- [pytorch笔记] 调整网络学习率
1. 为网络的不同部分指定不同的学习率 class LeNet(t.nn.Module): def __init__(self): super(LeNet, self).__init__() self ...
- 20175215 2018-2019-2 第五周java课程学习总结
第六章学习内容 1.接口 使用interface来定义一个接口. 接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是pu ...
- Shell执行脚本
Shell作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行这一条,这种方式称为交互式,但还有另一种执行命令的方式称为批处理方式,用户事先写一个Shell脚本,Shell可以一次把这些命 ...
- linux下快速查找文件(转载)
权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xxmonstor/article/deta ...