我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScriptreduce方法使用方法介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScriptreduce方法使用方法介绍

1. reduce方法的使用

Array.prototype.reduce(callBack(previousValue, currentValue, currentIndex), initialValue)

reduce是数组的一个高阶方法,用来实现对数组的累加计算

var arr = ['a', 'b', 'c'];
var str = arr.reduce(function (previousValue, currentValue, currentIndex) {
  return previousValue + currentValue;
  });
console.log(str); //abc
var str = arr.reduce(function (previousValue, currentValue, currentIndex) {
  return previousValue + currentValue;
}, 's');
console.log(str); //sabc

reduce的回调函数中一共有4个参数:

  • previous 表示计算的前一个值
  • currentValue 是正在被计算的值
  • currentIndex 是正在计算的索引
  • initialValue 设置累加的初始值

在数组遍历的时候,回调函数的返回值会累加给previousValue,一直到数组遍历完毕返回这个累加值。

在没有传递initialValue的情况下,首次累加的时候previousValue为数组的第1项,currentValue为数组的第2项,当传递了initialValue的时候previousValue初始值为initialValue,currentValue初始值为数组的第一项

2. reduce数组的使用场景

2.1 扁平化数组

使用reduce实现Array.prototype.flat的功能

const arr = [[1, 2, 3], [4, 5, 6, 7, 8], [9]];
const flat = arr.reduce((previousValue, currentValue) => {
   return previousValue.concat(currentValue);
});
console.log(flat); //[1, 2, 3, 4, 5, 6, 7, 8, 9]

2.2 数组去重

const arr = [1, 2, 5, 2, 5, 5];
const deduplication = arr.reduce((previousValue, currentValue) => {
  return previousValue.includes(currentValue) ? previousValue : previousValue.concat([currentValue]);
}, []);
console.log(deduplication);

2.3 计算数组最大/最小值

const arr = [2, 5, 1, 88, 12, -21, 33, 10, 75];
const maxVal = arr.reduce((previousValue, currentValue) => Math.max(previousValue, currentValue));
console.log(maxVal); //8

2.4 数组求和

const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((previousValue, currentValue) => previousValue + currentValue);
console.log(sum); //15

2.5 计算数组中元素的出现次数

const arr = ['a', 'c', 'b', 'a', 'c', 'e'];
const countedCharacter = arr.reduce((previousValue, currentValue) => {
if (currentValue in previousValue) {
  return { ...previousValue, [currentValue]: previousValue[currentValue] + 1 };
} else {
    return { ...previousValue, [currentValue]: 1 };
  };
}, {});
console.log(countedCharacter); //{a: 2, c: 2, b: 1, e: 1};

3. 操作对象

累加对象数组里面的值

const arr = [{ x: 1 }, { x: 2 }, { x: 3 }];
const sum = arr.reduce((previousValue, currentValue) =>
 previousValue + currentValue.x, 0);
console.log(sum); //6

4. 使用reduce代替.filter().map()

使用reduce可以同时完成过滤合映射,不需要遍历两次数组

const arr = [81, 92, 67, 100, 79];
const scoreArr = arr.filter(s => s > 80).map(val => ({ score: val }));
const scoreArr1 = arr.reduce((previousValue, currentValue) => {
  if (currentValue > 80) { return previousValue.concat([{ score: currentValue }]) } else {
    return previousValue;
  }
}, []);
console.log(scoreArr); //[{score: 81}, {score: 92}, {score: 100}]
console.log(scoreArr1); //[{score: 81}, {score: 92}, {score: 100}]

5. 按顺序执行promise

function p1(num) {
  return new Promise((rs, rj) => {
    setTimeout(() => {
      rs(num + 5);
    }, 100);
  });
 };
function p2(num) {
  return new Promise((rs, rj) => {
    setTimeout(() => {
      rs(num * 2);
    }, 300);
  });
 };
function p3(num) {
  return new Promise((rs, rj) => {
    rs(num - 3);
  })
 };
//链式调用
Promise.resolve(10)
  .then(p1)
  .then(p2)
  .then(p3)
  .then(res => console.log(res)) ;  //27
//使用reduce执行promise
var arr = [p1, p2, p3];
var lastPromise = arr.reduce((previousPromise, currentPromise) => previousPromise.then(currentPromise), Promise.resolve(10));
lastPromise.then(res => console.log(res)); //27

6. 使用compose函数组合实现管道

管道(Pipe)是指输入一个值,依次经过管道(有序的函数运算)后输出这个值,是函数编程的核心思想

function add10(num) {
  return num + 10;
};
function multipl2(num) {
  return num * 2;
};
function divide3(num) {
  return num / 3;
};
const compose = (fns) => (initialValue) => fns.reduce((previous, current) => current(previous), initialValue);
const calculate1 = compose([add10, divide3]);
const calculate2 = compose([divide3, add10, multipl2]);
console.log(calculate1(20)); //10
console.log(calculate2(9)); //26

到此这篇关于JavaScript reduce方法使用方法介绍的文章就介绍到这了,更多相关JS reduce内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScriptreduce方法使用方法介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScriptreduce方法使用方法介绍

Reduce是个纯函数,即只要传入相同的参数,每次都应返回相同的结果。不要把和处理数据无关的代码放在Reduce里,让Reduce保持纯净,只是单纯地执行计算,这篇文章主要介绍了Redux拆分reduce函数流程
2022-11-13

mysqldump的使用方法介绍

这篇文章主要介绍了mysqldump的使用方法介绍,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。1、说明mysqldump在库被删除的情况下,无法直接从文件恢复,需要手动新建同名库,才能从文件恢复数据。2、语法shell
2023-06-15

ReactHooks使用方法全方位介绍

在react类组件(class)写法中,有setState和生命周期对状态进行管理,但是在函数组件中不存在这些,故引入hooks(版本:>=16.8),使开发者在非class的情况下使用更多react特性
2023-03-19

Jquery 的outerHeight方法使用介绍

获取第一个匹配元素外部高度默认包括补白和边框,在本文将为大家介绍下具体的实现代码,此方法对可见和隐藏元素均有效,感兴趣的朋友可以了解下
2022-11-15

GoLangcontext包的使用方法介绍

日常Go开发中,Context包是用的最多的一个了,几乎所有函数的第一个参数都是ctx,那么我们为什么要传递Context呢,Context又有哪些用法,底层实现是如何呢?相信你也一定会有探索的欲望,那么就跟着本篇文章,一起来学习吧
2023-03-15

Javainterrupt()方法使用实例介绍

一个线程在未正常结束之前,被强制终止是很危险的事情.因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等。所以你看到Thread.suspend,Thread.stop等方法都被Deprecated了
2023-02-03

fastjson 使用方法详细介绍

Fastjson介绍Fastjson是一个Java语言编写的JSON处理器。1、遵循http://json.org标准,为其官方网站收录的参考实现之一。2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collecti
2023-05-30

android之HttpPostHttpGet使用方法介绍

直接讲用法,先知道怎么用,再知道怎么回事 1、HttpPost 代码如下: try{ //创建连接 HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new
2022-06-06

android startActivityForResult的使用方法介绍

Activity 跳转 都知道用startActivity(Intent)但是如果下面情况呢?Activity1 跳转到 Activity2 但是还需要在Activity2 再回到 Activity1呢? 可能有人说: 那我在Activi
2022-06-06

jQuery trigger()方法用法介绍

jQuery的trigger()方法用于触发指定元素上的特定事件。它模拟了用户对元素的交互操作,例如点击、鼠标悬停等,从而触发相应的事件处理程序。使用trigger()方法可以实现以下几个功能:1. 触发指定元素上的特定事件。例如,可以使用
2023-08-11

Android手机使用Fiddler方法介绍

Fiddler是一款免费的抓包、调试工具,比Wireshark要小巧,更简洁,本节就来介绍如何通过WIFI来抓取Android手机的HTTP和HTTPS包。一、连接Android手机1.1、手机端配置 电脑配置WIFI后,手机
2022-06-06

编程热搜

目录