Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在reduce函数中映射参数?_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript 如何在reduce函数中映射参数?

Javascript 如何在reduce函数中映射参数?,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,MDN对reduce的定义如下: reduce方法执行在数组的每个元素上提供的reducer函数,从而产生一个输出值 让我们不要想当然,只分析以下语句的语法: const array1 = [1, 2, 3, 4]; const reducer = (y, x) => y + x; // 1 + 2 + 3 + 4 console.log(array1.reduce(reducer)); // expected output: 10 // 5 + 1 + 2 + 3 + 4 conso

MDN对reduce的定义如下:

reduce方法执行在数组的每个元素上提供的reducer函数,从而产生一个输出值

让我们不要想当然,只分析以下语句的语法:

const array1 = [1, 2, 3, 4];
const reducer = (y, x) => y + x;

// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10

// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
reducer是一个函数,它接受两个参数并返回它们的和 reducer在数组的每个元素上执行,但是“数组的每个元素”只是一个参数,为什么我可以假设SUM是另一个参数,并缓存在某个地方等待下一个add操作?为什么我可以假设reduce最终会返回总和? 有人能回答这些问题吗?来自其他语言背景的人,例如C,也有函数概念。我经常被Javascript的语法弄糊涂

这就是为什么当我看到:

const pipeline = [
  array => { array.pop(); return array; },
  array => array.reverse()
];

pipeline.reduce((xs, f) => f(xs), [1, 2, 3]);
因为同样,根据MDN,reduce方法执行您在数组的每个元素上提供的reducer函数,从而产生单个输出值

只是这一次,

减速器:xs,f=>fxs

累加器:[1,2,3]

阵列1:管道

那么,我们如何解释它的行为类似于我们的第一个英语例子

reducer在数组的每个元素上执行,但是“数组的每个元素”只是一个参数,为什么我可以假设SUM是另一个参数,并缓存在某个地方等待下一个add操作

提供的回调调用多次,对于数组中的每个项调用一次,对于长度-1次,如果没有提供初始值。您可以自己轻松实现这一点:

常数数组1=[1,2,3,4]; 常数减速机=y,x=>y+x; Array.prototype.myReduce=函数回调,initialValue{ 设accum=初始值===未定义 这班 :初始值; 对于设i=0;iconsole.logarray1.MyReducer减速机,5;你很快就停止了阅读。reducer函数的返回值被分配给累加器,累加器的值在整个数组的每次迭代中都会被记住,并最终成为最终的单个结果值。1。reducer接受四个参数,前两个是强制的,请参见缺少方括号。您可以像在任何JS函数中一样传递更多信息,但它们将被忽略。2.Array.prototype.reduce与求和无关,您可以做其他几件事,如计数、计算平均值、展平等。reduce是指在迭代数组中的每个元素时使用累加器。@RaymondChen谢谢,Raymond。我的坏习惯。过早停止阅读:为什么杰克的答案被删除了?!我正试着要求跟进questions@RaymondChen在第二个示例中,pipeline是要缩减的数组,xs,f=>fxs是缩减函数,[1,2,3]是累加器init值,我们如何用英语证明和解释这一点?在第二个示例中,pipeline是要缩减的数组,xs,f=>fxs是缩减函数,[1,2,3]是累加器init值,我们如何用英语证明和解释它?它的工作方式是相同的-它遍历数组,执行与每个项相关的操作,并返回一个值作为下一个累加器使用。对于管道,数组恰好是一个函数数组,每次调用的结果作为下一个累加器传递,直到结束,最后一次调用的结果就是整个结果;它适用于每个数组元素[1,2,3,4],这是有意义的。但在第二个例子中,reducer是xs,f=>fxs,这到底是什么?它是如何在管道的每个数组元素上工作的?y,x=>y+x将累加器添加到当前迭代项中,并返回总和。类似地,xs,f=>fxs使用累加器调用正在迭代的当前项,并返回结果。在这里的.reduce回调中,fxs函数调用针对数组中的每个项运行,如答案开头所述。