JavaScript中Reduce10个常用场景技巧

yizhihongxing

JavaScript中reduce是一个非常有用的数组方法,它可以对一个数组的所有元素进行迭代,并返回一个最终的结果。reduce方法有很多应用场景,下面将介绍十个常用场景技巧。

1. 数组求和

使用reduce方法可以很方便地对数组中的数值进行求和。只需将reduce方法的初始值设置为0,每次迭代时将两个数值相加即可。

const arr = [1, 2, 3, 4];
const result = arr.reduce((acc, cur) => acc + cur, 0);
console.log(result); // 10

2. 数组最大值

同样可以使用reduce方法来计算一个数组中的最大值。只需将reduce方法的初始值设置为第一个元素,每次迭代时比较当前元素与累加器的值,返回较大的值即可。

const arr = [3, 6, 2, 8, 4];
const result = arr.reduce((acc, cur) => cur > acc ? cur : acc);
console.log(result); // 8

3. 数组去重

可以使用reduce方法将一个数组去重,遍历数组时将已有元素存储到累加器中,每次迭代时判断当前元素是否已经存在于累加器中,若不存在则存储到累加器中。

const arr = [1, 2, 3, 2, 4, 1];
const result = arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []);
console.log(result); // [1, 2, 3, 4]

4. 数组计数

countBy方法可以统计一个数组中各个元素出现的次数,返回一个对象。

const arr = ['a', 'b', 'a', 'c', 'b', 'a'];
const result = arr.reduce((acc, cur) => {
  acc[cur] = acc[cur] ? ++acc[cur] : 1;
  return acc;
}, {});
console.log(result); // {a: 3, b: 2, c: 1}

5. 对象成员求和

可以使用reduce方法对一个对象的成员进行求和。将reduce方法的初始值设置为0,每次迭代时将对象成员的值加上累加器的值即可。

const obj = {a: 1, b: 2, c: 3};
const result = Object.values(obj).reduce((acc, cur) => acc + cur, 0);
console.log(result); // 6

6. 对象成员平均值

可以使用reduce方法对一个对象的成员进行平均值计算。首先使用Object.values方法获取对象成员的值组成的数组,然后对其使用reduce方法求和。最后将结果除以成员数量即可得到平均值。

const obj = {a: 1, b: 2, c: 3};
const arr = Object.values(obj);
const result = arr.reduce((acc, cur) => acc + cur, 0) / arr.length;
console.log(result); // 2

7. 对象成员合并

可以使用reduce方法将一个对象的成员合并为一个字符串。首先使用Object.values方法获取对象成员的值组成的数组,然后对其使用reduce方法进行字符串拼接。

const obj = {a: 'Hello', b: 'World', c: '!'};
const result = Object.values(obj).reduce((acc, cur) => acc + cur, '');
console.log(result); // 'HelloWorld!'

8. 多维数组展平

可以使用reduce方法将一个多维数组展平为一维数组。每次迭代时判断当前元素是否为数组,若是则递归调用reduce方法进行展平,否则将元素存储到累加器中。

const arr = [1, [2, [3, [4]]]];
const flatten = arr => arr.reduce((acc, cur) => {
  return Array.isArray(cur) ? [...acc, ...flatten(cur)] : [...acc, cur];
}, []);
const result = flatten(arr);
console.log(result); // [1, 2, 3, 4]

9. 函数式Compose

可以使用reduce方法将多个函数组合为一个函数,函数式编程中称之为Compose。每次迭代时将当前函数作为参数传入上一个函数中执行。

const compose = (...fns) => x => fns.reduceRight((acc, cur) => cur(acc), x);
const f1 = x => x * 2;
const f2 = x => x - 1;
const f3 = x => x + 10;
const fn = compose(f1, f2, f3);
const result = fn(5);
console.log(result); // 19

10. 函数式Pipe

可以使用reduce方法将多个函数组合为一个函数,函数式编程中称之为Pipe。每次迭代时将当前函数作为参数传入上一个函数中执行。

const pipe = (...fns) => x => fns.reduce((acc, cur) => cur(acc), x);
const f1 = x => x * 2;
const f2 = x => x - 1;
const f3 = x => x + 10;
const fn = pipe(f1, f2, f3);
const result = fn(5);
console.log(result); // 19

以上就是JavaScript中reduce方法的十个常用场景技巧,可以广泛地应用于各种开发场景中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中Reduce10个常用场景技巧 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • vue-cli4项目开启eslint保存时自动格式问题

    下面是“vue-cli4项目开启eslint保存时自动格式问题”的完整攻略。 1. 安装必要依赖 首先,我们需要安装一些必要的依赖,以支持Eslint的自动格式化功能。具体操作如下: 安装Eslint相关依赖 npm install eslint –save-dev npm install eslint-plugin-vue –save-dev npm …

    JavaScript 2023年6月10日
    00
  • javascript开发随笔一 preventDefault的必要

    JavaScript开发随笔一:preventDefault的必要 在JavaScript开发中,我们经常会用到一些DOM操作,例如点击超链接跳转页面,提交表单等。但是有些时候,我们可能会需要改变这些默认行为,比如说:阻止页面跳转,防止表单提交。 这个时候,我们就需要用到事件对象的preventDefault()方法。这个方法可以阻止元素默认的行为,从而实现…

    JavaScript 2023年6月11日
    00
  • 分享十八个杀手级JavaScript单行代码

    下面我来详细讲解“分享十八个杀手级JavaScript单行代码”的完整攻略。 什么是“十八个杀手级JavaScript单行代码”? “十八个杀手级JavaScript单行代码”是一份由王福朋所分享的关于JavaScript技巧的文章,包含了18个利用JavaScript语言精妙之处的单行代码示例,涵盖了诸如类型判断、数组去重、随机排序等方面。 怎样使用这些代…

    JavaScript 2023年5月18日
    00
  • React 组件中的 bind(this)示例代码

    针对React组件中的bind(this)代码示例,以下是完整攻略: 什么是bind(this) bind(this)是JavaScript ES5中引入的方法,用于显式地指定函数中this关键字的指向。 在React组件中,使用bind(this)是为了确保在组件更新或者父组件通过props传递了函数后,组件内部调用该函数this指向正确,不会出现this…

    JavaScript 2023年6月11日
    00
  • javascript+css实现进度条效果

    下面是实现进度条效果的攻略: 1.基本原理 进度条通常是在页面的顶部或底部显示的,用来展示某个任务的完成进度。实现进度条的基本原理是,通过JavaScript控制元素的宽度达到动画效果。然后结合CSS使进度条更美观。 2. 实现步骤 2.1 HTML结构 首先需要在HTML中添加进度条的结构,通常情况下进度条是一个<div>元素,同时为了更好地控…

    JavaScript 2023年6月10日
    00
  • Jquery解析json数据详解

    Jquery解析json数据详解 JSON(JavaScript Object Notation)是一种轻量级数据交换格式,易于阅读和编写。在web开发中,经常需要将json数据解析并显示在页面上。JQuery可以很方便地处理json数据,本文将详细讲解jquery解析json数据的方法。 1. 获取json数据 首先需要获取json数据,可以从服务器端获取…

    JavaScript 2023年5月27日
    00
  • JavaScript利用canvas实现鼠标跟随特效

    实现鼠标跟随特效,通常使用的是JavaScript中的Canvas技术,下面我来详细讲解如何实现这样一个特效,具体步骤如下: 步骤一:获取元素 首先,我们需要获取需要操作的元素,通常是一个包含设计特效的区域,可以使用document.getElementById()或document.querySelector()方法进行获取。比如: const canva…

    JavaScript 2023年6月11日
    00
  • Javascript Date getSeconds() 方法

    以下是关于JavaScript Date对象的getSeconds()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getSeconds()方法 JavaScript Date对象的getSeconds()方法返回一个秒的数字(0-59)。方法可用获取当前日期的秒数。 下使用Date对象的getSeconds()方法的示例: var…

    JavaScript 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部