Array.prototype.reduce()

Array.prototype.reduce()

reduce() 方法对数组中的每个元素按序执行一个由您提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。

第一次执行回调函数时,不存在”上一次的计算结果”。如果需要回调函数从数组索引为 0 的元素开始执行,则需要传递初始值。否则,数组索引为 0 的元素将被作为初始值 initialValue,迭代器将从第二个元素开始执行(索引为 1 而不是 0)。

下面的例子能够帮助你理解 reduce() 的用处——计算数组所有元素的总和:

reducer 逐个遍历数组元素,每一步都将当前元素的值与上一步的计算结果相加(上一步的计算结果是当前元素之前所有元素的总和)——直到没有更多的元素被相加。 Copy to Clipboard callbackFn

一个 “reducer” 函数,包含四个参数:

  • previousValue:上一次调用 callbackFn 时的返回值。在第一次调用时,若指定了初始值 initialValue,其值则为 initialValue,否则为数组索引为 0 的元素 array[0]
  • currentValue:数组中正在处理的元素。在第一次调用时,若指定了初始值 initialValue,其值则为数组索引为 0 的元素 array[0],否则为 array[1]
  • currentIndex:数组中正在处理的元素的索引。若指定了初始值 initialValue,则起始索引号为 0,否则从索引 1 起始。
  • array:用于遍历的数组。
    initialValue可选

作为第一次调用 callback 函数时参数 previousValue 的值。若指定了初始值 initialValue,则 currentValue 则将使用数组第一个元素;否则 previousValue 将使用数组第一个元素,而 currentValue 将使用数组第二个元素。

使用 “reducer” 回调函数遍历整个数组后的结果。
TypeError

数组为空且初始值 initialValue 未提供。

ECMAScript 规范描述了 reduce() 的行为:

callbackfn 应是一个接受四个参数的函数, reduce 对于数组中第一个元素之后的每一个元素,按升序各调用一次回调函数。
callbackfn 被调用时会传入四个参数:

  • previousValue(前一次调用 callbackfn 得到的返回值)
  • currentValue(数组中正在处理的元素)
  • currentIndex(数组中正在处理的元素的索引)
  • 被遍历的对象

回调函数第一次执行时, previousValuecurrentValue 的取值有两种情况:

  • 如果调用 reduce() 时提供了 initialValuepreviousValue 取值则为 initialValuecurrentValue 则取数组中的第一个值。
  • 如果没有提供 initialValue,那么 previousValue 取数组中的第一个值, currentValue 取数组中的第二个值。

如果数组为空且未指定初始值 initialValue,则会抛出 TypeErrorreduce 不会直接改变调用它的对象,但对象可被调用的 callbackfn 所改变。
遍历的元素范围是在第一次调用 callbackfn 之前确定的。所以即使有元素在调用开始后被追加到数组中,这些元素也不会被 callbackfn 访问。如果数组现有的元素发生了变化,传递给 callbackfn 的值将会是元素被 reduce 访问时的值(即发生变化后的值);在调用 reduce 开始后,尚未被访问的元素若被删除,则其将不会被 reduce 访问。

如果数组仅有一个元素(无论位置如何)并且没有提供初始值 initialValue,或者有提供 initialValue 但是数组为空,那么此唯一值将被返回且 callbackfn 不会被执行。

提供初始值 initialValue 通常更安全,正如下面的例子,如果没有提供 initialValue,则 reduce 方法会因数组长度的不同(大于 1、等于 1、等于 0)而有不同的表现:

<span class="token keyword">const <span class="token function-variable function">getMax <span class="token operator">= <span class="token punctuation">(<span class="token parameter">a<span class="token punctuation">, b<span class="token punctuation">) <span class="token operator">=> Math<span class="token punctuation">.<span class="token function">max<span class="token punctuation">(a<span class="token punctuation">, b<span class="token punctuation">)<span class="token punctuation">;

</span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

假如运行以下无初始值的 reduce() 代码:

<span class="token keyword">const array <span class="token operator">= <span class="token punctuation">[<span class="token number">15<span class="token punctuation">, <span class="token number">16<span class="token punctuation">, <span class="token number">17<span class="token punctuation">, <span class="token number">18<span class="token punctuation">, <span class="token number">19<span class="token punctuation">]<span class="token punctuation">;

<span class="token keyword">function <span class="token function">reducer<span class="token punctuation">(<span class="token parameter">previous<span class="token punctuation">, current<span class="token punctuation">, index<span class="token punctuation">, array<span class="token punctuation">) <span class="token punctuation">{
  <span class="token keyword">const returns <span class="token operator">= previous <span class="token operator">+ current<span class="token punctuation">;
  console<span class="token punctuation">.<span class="token function">log<span class="token punctuation">(<span class="token template-string"><span class="token template-punctuation string"><span class="token string">previous: <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${previous<span class="token interpolation-punctuation punctuation">}<span class="token string">, current: <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${current<span class="token interpolation-punctuation punctuation">}<span class="token string">, index: <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${index<span class="token interpolation-punctuation punctuation">}<span class="token string">, returns: <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${returns<span class="token interpolation-punctuation punctuation">}<span class="token template-punctuation string"><span class="token punctuation">)<span class="token punctuation">;
  <span class="token keyword">return returns<span class="token punctuation">;
<span class="token punctuation">}

array<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(reducer<span class="token punctuation">)<span class="token punctuation">;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

callback 被调用四次,每次调用的参数和返回值如下表:

callback iteration previousValue currentValue currentIndex arrayreturn value first call 15 16 1 [15, 16, 17, 18, 19] 31 second call 31 17 2 [15, 16, 17, 18, 19] 48 third call 48 18 3 [15, 16, 17, 18, 19] 66 fourth call 66 19 4 [15, 16, 17, 18, 19] 85

reduce() 返回的值将是最后一次回调返回值( 85)。

在这里,我们以相同的算法 reduce 同一个数组,但提供 10 作为初始值:

<span class="token punctuation">[<span class="token number">15<span class="token punctuation">, <span class="token number">16<span class="token punctuation">, <span class="token number">17<span class="token punctuation">, <span class="token number">18<span class="token punctuation">, <span class="token number">19<span class="token punctuation">]<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">( <span class="token punctuation">(<span class="token parameter">previousValue<span class="token punctuation">, currentValue<span class="token punctuation">, currentIndex<span class="token punctuation">, array<span class="token punctuation">) <span class="token operator">=> previousValue <span class="token operator">+ currentValue<span class="token punctuation">, <span class="token number">10 <span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard
callback iteration previousValue currentValue currentIndex arrayreturn value first call 10 15 0 [15, 16, 17, 18, 19] 25 second call 25 16 1 [15, 16, 17, 18, 19] 41 third call 41 17 2 [15, 16, 17, 18, 19] 58 fourth call 58 18 3 [15, 16, 17, 18, 19] 76 fifth call 76 19 4 [15, 16, 17, 18, 19] 95

这种情况下 reduce() 返回的值是 95

<span class="token keyword">let sum <span class="token operator">= <span class="token punctuation">[<span class="token number">0<span class="token punctuation">, <span class="token number">1<span class="token punctuation">, <span class="token number">2<span class="token punctuation">, <span class="token number">3<span class="token punctuation">]<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(<span class="token keyword">function <span class="token punctuation">(<span class="token parameter">previousValue<span class="token punctuation">, currentValue<span class="token punctuation">) <span class="token punctuation">{
  <span class="token keyword">return previousValue <span class="token operator">+ currentValue
<span class="token punctuation">}<span class="token punctuation">, <span class="token number">0<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

你也可以写成箭头函数的形式:

<span class="token keyword">let total <span class="token operator">= <span class="token punctuation">[ <span class="token number">0<span class="token punctuation">, <span class="token number">1<span class="token punctuation">, <span class="token number">2<span class="token punctuation">, <span class="token number">3 <span class="token punctuation">]<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(
  <span class="token punctuation">( <span class="token parameter">previousValue<span class="token punctuation">, currentValue <span class="token punctuation">) <span class="token operator">=> previousValue <span class="token operator">+ currentValue<span class="token punctuation">,
  <span class="token number">0
<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

要累加对象数组中包含的值,必须提供 initialValue,以便各个 item 正确通过你的函数。

<span class="token keyword">let initialValue <span class="token operator">= <span class="token number">0
<span class="token keyword">let sum <span class="token operator">= <span class="token punctuation">[<span class="token punctuation">{<span class="token literal-property property">x<span class="token operator">: <span class="token number">1<span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">{<span class="token literal-property property">x<span class="token operator">: <span class="token number">2<span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">{<span class="token literal-property property">x<span class="token operator">: <span class="token number">3<span class="token punctuation">}<span class="token punctuation">]<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(<span class="token keyword">function <span class="token punctuation">(<span class="token parameter">previousValue<span class="token punctuation">, currentValue<span class="token punctuation">) <span class="token punctuation">{
    <span class="token keyword">return previousValue <span class="token operator">+ currentValue<span class="token punctuation">.x
<span class="token punctuation">}<span class="token punctuation">, initialValue<span class="token punctuation">)

console<span class="token punctuation">.<span class="token function">log<span class="token punctuation">(sum<span class="token punctuation">) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

你也可以写成箭头函数的形式:

<span class="token keyword">let initialValue <span class="token operator">= <span class="token number">0
<span class="token keyword">let sum <span class="token operator">= <span class="token punctuation">[<span class="token punctuation">{<span class="token literal-property property">x<span class="token operator">: <span class="token number">1<span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">{<span class="token literal-property property">x<span class="token operator">: <span class="token number">2<span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">{<span class="token literal-property property">x<span class="token operator">: <span class="token number">3<span class="token punctuation">}<span class="token punctuation">]<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(
    <span class="token punctuation">(<span class="token parameter">previousValue<span class="token punctuation">, currentValue<span class="token punctuation">) <span class="token operator">=> previousValue <span class="token operator">+ currentValue<span class="token punctuation">.x
    <span class="token punctuation">, initialValue
<span class="token punctuation">)

console<span class="token punctuation">.<span class="token function">log<span class="token punctuation">(sum<span class="token punctuation">) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

<span class="token keyword">let flattened <span class="token operator">= <span class="token punctuation">[<span class="token punctuation">[<span class="token number">0<span class="token punctuation">, <span class="token number">1<span class="token punctuation">]<span class="token punctuation">, <span class="token punctuation">[<span class="token number">2<span class="token punctuation">, <span class="token number">3<span class="token punctuation">]<span class="token punctuation">, <span class="token punctuation">[<span class="token number">4<span class="token punctuation">, <span class="token number">5<span class="token punctuation">]<span class="token punctuation">]<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(
  <span class="token keyword">function<span class="token punctuation">(<span class="token parameter">previousValue<span class="token punctuation">, currentValue<span class="token punctuation">) <span class="token punctuation">{
    <span class="token keyword">return previousValue<span class="token punctuation">.<span class="token function">concat<span class="token punctuation">(currentValue<span class="token punctuation">)
  <span class="token punctuation">}<span class="token punctuation">,
  <span class="token punctuation">[<span class="token punctuation">]
<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

你也可以写成箭头函数的形式:

<span class="token keyword">let flattened <span class="token operator">= <span class="token punctuation">[<span class="token punctuation">[<span class="token number">0<span class="token punctuation">, <span class="token number">1<span class="token punctuation">]<span class="token punctuation">, <span class="token punctuation">[<span class="token number">2<span class="token punctuation">, <span class="token number">3<span class="token punctuation">]<span class="token punctuation">, <span class="token punctuation">[<span class="token number">4<span class="token punctuation">, <span class="token number">5<span class="token punctuation">]<span class="token punctuation">]<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(
  <span class="token punctuation">( <span class="token parameter">previousValue<span class="token punctuation">, currentValue <span class="token punctuation">) <span class="token operator">=> previousValue<span class="token punctuation">.<span class="token function">concat<span class="token punctuation">(currentValue<span class="token punctuation">)<span class="token punctuation">,
  <span class="token punctuation">[<span class="token punctuation">]
<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

<span class="token keyword">let names <span class="token operator">= <span class="token punctuation">[<span class="token string">'Alice'<span class="token punctuation">, <span class="token string">'Bob'<span class="token punctuation">, <span class="token string">'Tiff'<span class="token punctuation">, <span class="token string">'Bruce'<span class="token punctuation">, <span class="token string">'Alice'<span class="token punctuation">]

<span class="token keyword">let countedNames <span class="token operator">= names<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(<span class="token keyword">function <span class="token punctuation">(<span class="token parameter">allNames<span class="token punctuation">, name<span class="token punctuation">) <span class="token punctuation">{
  <span class="token keyword">if <span class="token punctuation">(name <span class="token keyword">in allNames<span class="token punctuation">) <span class="token punctuation">{
    allNames<span class="token punctuation">[name<span class="token punctuation">]<span class="token operator">++
  <span class="token punctuation">}
  <span class="token keyword">else <span class="token punctuation">{
    allNames<span class="token punctuation">[name<span class="token punctuation">] <span class="token operator">= <span class="token number">1
  <span class="token punctuation">}
  <span class="token keyword">return allNames
<span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">{<span class="token punctuation">}<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

<span class="token keyword">let people <span class="token operator">= <span class="token punctuation">[
  <span class="token punctuation">{ <span class="token literal-property property">name<span class="token operator">: <span class="token string">'Alice'<span class="token punctuation">, <span class="token literal-property property">age<span class="token operator">: <span class="token number">21 <span class="token punctuation">}<span class="token punctuation">,
  <span class="token punctuation">{ <span class="token literal-property property">name<span class="token operator">: <span class="token string">'Max'<span class="token punctuation">, <span class="token literal-property property">age<span class="token operator">: <span class="token number">20 <span class="token punctuation">}<span class="token punctuation">,
  <span class="token punctuation">{ <span class="token literal-property property">name<span class="token operator">: <span class="token string">'Jane'<span class="token punctuation">, <span class="token literal-property property">age<span class="token operator">: <span class="token number">20 <span class="token punctuation">}
<span class="token punctuation">]<span class="token punctuation">;

<span class="token keyword">function <span class="token function">groupBy<span class="token punctuation">(<span class="token parameter">objectArray<span class="token punctuation">, property<span class="token punctuation">) <span class="token punctuation">{
  <span class="token keyword">return objectArray<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(<span class="token keyword">function <span class="token punctuation">(<span class="token parameter">acc<span class="token punctuation">, obj<span class="token punctuation">) <span class="token punctuation">{
    <span class="token keyword">let key <span class="token operator">= obj<span class="token punctuation">[property<span class="token punctuation">]
    <span class="token keyword">if <span class="token punctuation">(<span class="token operator">!acc<span class="token punctuation">[key<span class="token punctuation">]<span class="token punctuation">) <span class="token punctuation">{
      acc<span class="token punctuation">[key<span class="token punctuation">] <span class="token operator">= <span class="token punctuation">[<span class="token punctuation">]
    <span class="token punctuation">}
    acc<span class="token punctuation">[key<span class="token punctuation">]<span class="token punctuation">.<span class="token function">push<span class="token punctuation">(obj<span class="token punctuation">)
    <span class="token keyword">return acc
  <span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">{<span class="token punctuation">}<span class="token punctuation">)
<span class="token punctuation">}

<span class="token keyword">let groupedPeople <span class="token operator">= <span class="token function">groupBy<span class="token punctuation">(people<span class="token punctuation">, <span class="token string">'age'<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard Copy to Clipboard

备注: 如果你正在使用一个可以兼容SetArray.from() 的环境,你可以使用 let arrayWithNoDuplicates = Array.from(new Set(myArray)) 来获得一个相同元素被移除的数组。

<span class="token keyword">let myArray <span class="token operator">= <span class="token punctuation">[<span class="token string">'a'<span class="token punctuation">, <span class="token string">'b'<span class="token punctuation">, <span class="token string">'a'<span class="token punctuation">, <span class="token string">'b'<span class="token punctuation">, <span class="token string">'c'<span class="token punctuation">, <span class="token string">'e'<span class="token punctuation">, <span class="token string">'e'<span class="token punctuation">, <span class="token string">'c'<span class="token punctuation">, <span class="token string">'d'<span class="token punctuation">, <span class="token string">'d'<span class="token punctuation">, <span class="token string">'d'<span class="token punctuation">, <span class="token string">'d'<span class="token punctuation">]
<span class="token keyword">let myArrayWithNoDuplicates <span class="token operator">= myArray<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(<span class="token keyword">function <span class="token punctuation">(<span class="token parameter">previousValue<span class="token punctuation">, currentValue<span class="token punctuation">) <span class="token punctuation">{
  <span class="token keyword">if <span class="token punctuation">(previousValue<span class="token punctuation">.<span class="token function">indexOf<span class="token punctuation">(currentValue<span class="token punctuation">) <span class="token operator">=== <span class="token operator">-<span class="token number">1<span class="token punctuation">) <span class="token punctuation">{
    previousValue<span class="token punctuation">.<span class="token function">push<span class="token punctuation">(currentValue<span class="token punctuation">)
  <span class="token punctuation">}
  <span class="token keyword">return previousValue
<span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">[<span class="token punctuation">]<span class="token punctuation">)

console<span class="token punctuation">.<span class="token function">log<span class="token punctuation">(myArrayWithNoDuplicates<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

使用 Array.filter()Array.map() 会遍历数组两次,而使用具有相同效果的 Array.reduce() 只需要遍历一次,这样做更加高效。(如果你喜欢 for 循环,你可用使用 Array.forEach() 以在一次遍历中实现过滤和映射数组)

<span class="token keyword">const numbers <span class="token operator">= <span class="token punctuation">[<span class="token operator">-<span class="token number">5<span class="token punctuation">, <span class="token number">6<span class="token punctuation">, <span class="token number">2<span class="token punctuation">, <span class="token number">0<span class="token punctuation">]<span class="token punctuation">;

<span class="token keyword">const doubledPositiveNumbers <span class="token operator">= numbers<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(<span class="token punctuation">(<span class="token parameter">previousValue<span class="token punctuation">, currentValue<span class="token punctuation">) <span class="token operator">=> <span class="token punctuation">{
  <span class="token keyword">if <span class="token punctuation">(currentValue <span class="token operator">> <span class="token number">0<span class="token punctuation">) <span class="token punctuation">{
    <span class="token keyword">const doubled <span class="token operator">= currentValue <span class="token operator">* <span class="token number">2<span class="token punctuation">;
    previousValue<span class="token punctuation">.<span class="token function">push<span class="token punctuation">(doubled<span class="token punctuation">)<span class="token punctuation">;
  <span class="token punctuation">}
  <span class="token keyword">return previousValue<span class="token punctuation">;
<span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">[<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">;

console<span class="token punctuation">.<span class="token function">log<span class="token punctuation">(doubledPositiveNumbers<span class="token punctuation">)<span class="token punctuation">; </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard Copy to Clipboard Copy to Clipboard

<span class="token keyword">if <span class="token punctuation">(<span class="token operator">!<span class="token class-name">Array<span class="token punctuation">.prototype<span class="token punctuation">.mapUsingReduce<span class="token punctuation">) <span class="token punctuation">{
  <span class="token class-name">Array<span class="token punctuation">.prototype<span class="token punctuation">.<span class="token function-variable function">mapUsingReduce <span class="token operator">= <span class="token keyword">function<span class="token punctuation">(<span class="token parameter">callback<span class="token punctuation">, initialValue<span class="token punctuation">) <span class="token punctuation">{
    <span class="token keyword">return <span class="token keyword">this<span class="token punctuation">.<span class="token function">reduce<span class="token punctuation">(<span class="token keyword">function<span class="token punctuation">(<span class="token parameter">mappedArray<span class="token punctuation">, currentValue<span class="token punctuation">, currentIndex<span class="token punctuation">, array<span class="token punctuation">) <span class="token punctuation">{
      mappedArray<span class="token punctuation">[currentIndex<span class="token punctuation">] <span class="token operator">= <span class="token function">callback<span class="token punctuation">.<span class="token function">call<span class="token punctuation">(initialValue<span class="token punctuation">, currentValue<span class="token punctuation">, currentIndex<span class="token punctuation">, array<span class="token punctuation">)
      <span class="token keyword">return mappedArray
    <span class="token punctuation">}<span class="token punctuation">, <span class="token punctuation">[<span class="token punctuation">]<span class="token punctuation">)
  <span class="token punctuation">}
<span class="token punctuation">}

<span class="token punctuation">[<span class="token number">1<span class="token punctuation">, <span class="token number">2<span class="token punctuation">, <span class="token punctuation">, <span class="token number">3<span class="token punctuation">]<span class="token punctuation">.<span class="token function">mapUsingReduce<span class="token punctuation">(
  <span class="token punctuation">(<span class="token parameter">currentValue<span class="token punctuation">, currentIndex<span class="token punctuation">, array<span class="token punctuation">) <span class="token operator">=> currentValue <span class="token operator">+ currentIndex <span class="token operator">+ array<span class="token punctuation">.length
<span class="token punctuation">) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

Copy to Clipboard

Specification
ECMAScript Language Specification
sec-array.prototype.reduce
Report problems with this compatibility data on GitHubdesktop mobile server

Chrome

Edge

Firefox

Internet Explorer

Opera

Safari

Chrome Android

Firefox for Android

Opera Android

Safari on iOS

Samsung Internet

WebView Android

Deno

Node.js

3
Toggle history

12
Toggle history

3
Toggle history

9
Toggle history

10.5
Toggle history

5
Toggle history

18
Toggle history

4
Toggle history

14
Toggle history

4
Toggle history

1.0
Toggle history

37
Toggle history

1.0
Toggle history

0.10.0
Toggle history

Legend

Full supportFull support

Original: https://www.cnblogs.com/sexintercourse/p/16546545.html
Author: 漫思
Title: Array.prototype.reduce()

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/553444/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球