艺术考试网
全国站

reduce 英文解析:杨小二reduce方法在数组上执行回调函数的原理与参数

chanong
2025-05-06 04:59:48
编辑说
reduce6个实用例子,你可以详细了解一下。

英语|

翻译|杨小子

该方法在数组的每个元素上执行用户提供的回调函数,即“”。它通过计算上一个元素的返回值传递。结果是一个值。这是在数组的所有元素上运行的结果。

它如何工作?

函数遍历阵列元素一一。在每个步骤中,该函数将当前数组值添加到上一步的结果,直到没有更多元素要添加为止。

什么是参数?

参数是回调函数和可选的初始值。

回调功能

:它是先前回调函数生成的先前值。

:它是数组的当前元素,该函数将其传播。

:当前索引。但是,它是可选的。

:要穿越的阵列。它也是可选的。

初始值

初始值参数是可选的。它是首次调用回调时初始化上一个值的值。如果未指定初始值,则将上一个值初始化为初始值,并且当前值初始化为数组中的第二个值。

在某些情况下,该方法是一种有价值的方法。在某些情况下,它可能会节省您的时间或减少程序的行数。在本文中,我将向您展示()方法的6个用例。

1。总结数组元素

假设您有以下数组:

const prices = [5.99, 2.99, 3.99, 11.59]

您可能更喜欢使用用于循环的循环或for-each循环来汇总上述数组的元素,但是,如果使用(),则可以更少编写代码。

如您从简介中知道的那样,()接受4 参数reduce,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,, ,, ,, ,, ,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,, ,, ,, ,, ,,,,,,,,,,,,,,,,,,, ,, ,, ,, ,, ,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,, ,, ,, ,, ,,,,,,,,,,,,,,,,,,,

您需要传递的第二个参数是要启动的初始值。例如,如果要汇总数组的元素,则可以将0用作初始值。

const sum = prices.reduce((preVal, currVal, currentIndex, prices) => {  return preVal + currVal;}, 0);

()在数组中的每个元素上执行此功能。您要做的第一件事是将其设置为第二个参数的初始值,在这种情况下为“ 0”。否则,它将不确定。是数组的第一个元素。对于第二个执行,请在数组中的第二个元素上执行以下函数:

(preVal, currVal, currentIndex, prices) => {  return preVal + currVal;}

现在,而不是0。它等于上一个执行中返回的值。因此,= 5.99 + 0。现在,它是第二个迭代的第二个元素。

在这种情况下,您不需要和。因此,您可以将函数写为单行函数。

const sum = prices.reduce((preVal, currVal) => preVal + currVal, 0);

2。弄平阵列

使用()可以将多维阵列转换为一维数组。

var rows = [[2, 3, 5], [1, 2, 4], [8, 5, 5]]var matrixElements = rows.reduce( function (prev, current) {  return prev.concat(current);});

3。创建管道

此外,您可以减少功能以及数字和字符串。假设您具有一系列数学功能。例如,您具有以下功能:

function increment(input) { return input + 1;}function decrement(input) { return input - 1; }function double(input) { return input * 2; }function halve(input) { return input / 2; }

另外,您要使用,并且。因此您可以创建管道。然后,您可以将其与()一起使用。

let pipeline = [increment, double, decrement];
const result = pipeline.reduce(function(total, func) { return func(total);}, 8);
// result: 17

4。从数组中获取对象

例如,您有一系列有色苹果的字符串。使用()您可以构造一个Apple对象,如下所示。

const apples = ['green''red''red''yellow''red''yellow''green''green'];var appleMap = apples.reduce((prev, apple) => {  if (prev[apple] >= 1) prev[apple]++;  else prev[apple] = 1;  return prev;}, {});
console.log(appleMap);// result: {green: 3, red: 3, yellow: 2}

5。找到奇怪的整数

您可以使用()查找在给定数组中出现奇数时间的整数。下面的功能有一件坏事。如果您给有奇数数字的多个整数,则它将行不通。

const findOdd = (a) => a.reduce((a, b) => a ^ b);console.log(findOdd([1, 2, 2, 1])); // Result: 0console.log(findOdd([1, 2, 2, 1, 2, 3, 3])); // Result: 2console.log(findOdd([1, 2, 3, 4])); // Result: 4 -> Not working

6。找到给定数组的最大子阵列总和

使用此功能,您可以找到给定数组的最大子阵列总和。这是一个需要解决的大问题。解决并不容易。特别是如果您想使用单线解决方案来实现此功能,则更具挑战性。但是,如果您使用()会更容易。

const maxSequence = (a,sum=0) => a.reduce((max,v) => Math.max(sum = Math.max(sum + v, 0), max), 0);console.log(maxSequence([1,2,3,4])); // Result: 10console.log(maxSequence([1,2,3,4,-8])); // Result: 10console.log(maxSequence([1,-2,3,-2,5,-1,3,-9,1,6])); // Result: 8

加餐:()

您也可以使用()。它的工作方式与()相同。但是,它朝相反的方向起作用。当您学习时,()从第一个元素开始,然后转向最后一个元素。相反,()从最后一个元素开始,然后转到第一个元素。

const prices = [5.99, 2.99, 3.99, 11.59];
let sum = prices.reduceRight(function (preVal, currVal) { console.log('prev: ', preVal, 'curr: ', currVal); return prev + curr;});console.log(sum);
// prev: 11.59 curr: 3.99// prev: 15.58 curr: 2.99// prev: 18.57 curr: 5.99// 24.560000000000002

综上所述

了解一些内置功能可以帮助您提高编码技能。学习用例可以为您提供一些见解,您可以优雅地实现一些功能。

(中)也是一个有用的内置功能。如果您知道如何使用它,那就很强大。它可以帮助您编写少量的代码行,例如摘要价格的示例。

总而言之,本文()的使用如下:

谢谢你的宝贵时间。我希望这篇文章对您有所帮助。如果您发现它有用,请与正在开发的朋友分享。

感谢您的阅读,以及一个愉快的节目!

免责声明
本站所有收录的学校、专业及发布的图片、内容,均收集整理自互联网,仅用于信息展示,不作为择校或选择专业的建议,若有侵权请联系删除!

大家都在看

众多考生青睐工科专业,热门工科专业多角度介绍及控制科学与工程详析

众多考生青睐工科专业,热门工科专业多角度介绍及控制科学与工程详析

很多考生在选择专业时,大部分都会考虑工科专业,尤其是男生,选择工科类专业的人数更多。一方面是因为工科专业实践性强,就业率高;另一方面,工科专业大多具备较强的专业性和就业针对性
2025-05-06
reduce 英文解析:杨小二reduce方法在数组上执行回调函数的原理与参数

reduce 英文解析:杨小二reduce方法在数组上执行回调函数的原理与参数

reduce6个实用例子,你可以详细了解一下。
2025-05-06
中考化学:九年级化学上下册经典易错知识之常见物质俗称等汇总

中考化学:九年级化学上下册经典易错知识之常见物质俗称等汇总

一、常见物质的俗称、名称、化学式干冰 二氧化碳 CO2沼气 天然气 甲烷 CH4盐酸 氢氯酸 HCl大理石 石灰石 碳酸钙 CaCO3纯碱 苏打 碳酸钠 Na2CO3小苏打 碳酸氢
2025-05-06
高考志愿填报:就业前景好的理科专业之统计学与计算机类专业介绍

高考志愿填报:就业前景好的理科专业之统计学与计算机类专业介绍

《哪些理科专业好就业 就业前景好》由高考资讯网发布,主要内容:在高考志愿填报时,很多考生对一些就业前景好的专业很感兴趣。下面是由出国留学网编辑为大家整理的
2025-05-06
云南省2024年高考成绩6月23日公布及具体查询方法

云南省2024年高考成绩6月23日公布及具体查询方法

云南省2024年普通高等学校招生全国统一考试成绩于2024年6月23日公布。考生可通过云南省招生考试院官方网站“云南省招考频道(www.ynzs.cn)”、官方
2025-05-06
2023年辽宁高考作文新课标II卷试题内容及写作要求详情

2023年辽宁高考作文新课标II卷试题内容及写作要求详情

2023年辽宁高考作文:使用新课标II卷。新课标II卷试题内容:阅读下面的材料,根据要求写作。本试卷语言文字运用II提到的“安静一下不被打扰”的想法,在当代青少 ...
2025-05-06
43个优秀申论句子欣赏,领略奉献精神内涵与价值

43个优秀申论句子欣赏,领略奉献精神内涵与价值

43个申论开头套话万能句,优秀的申论句子,让我们来欣赏下吧! 《奉献的青春最美》 看吧,种得桃李满天下,心唯大我育青禾,三尺讲台托举莘莘学子的梦想
2025-05-06
江西高考文科排名184300能报考哪些大学及录取位次一览表

江西高考文科排名184300能报考哪些大学及录取位次一览表

江西高位次排名在184300的文科类考生能报考的大学名单有:长春职业技术学院、铁岭师范高等专科学校、济宁职业技术学院、惠州经济职业技术学院等
2025-05-06
2022年云南西双版纳高考成绩预计6月23日左右公布及相关安排

2022年云南西双版纳高考成绩预计6月23日左右公布及相关安排

2022年云南西双版纳高考成绩查询入口、查分系统 【#高考# #2022年云南西双版纳高考成绩查询入口、查分系统#】©无忧考网从云南省教育厅了解到
2025-05-06
22考研体验课等你来领!理科生必看10大热门考研专业推荐

22考研体验课等你来领!理科生必看10大热门考研专业推荐

据说星标我们的考生都一志愿上岸了关注仙女不迷路欢迎推荐给你身边的考研人想领取22考研体验课,关于考研课程的一切问题
2025-05-06