【问题标题】:eloquent javascript chapter 5 array reduce雄辩的javascript第5章数组减少
【发布时间】:2018-12-04 06:13:56
【问题描述】:

我一直试图弄清楚如何在 reduce 方法中将 count 定义为 0,然后在函数中使用。有没有人可以逐步描述这段代码的工作原理?谢谢!

let ranges = [[125184, 125259], [125264, 125274], [125278, 125280]];

    console.log(

      ranges.reduce((count, [from, to]) => {
          return count + (to - from);
        }, 0)

  );

【问题讨论】:

    标签: javascript arrays reduce


    【解决方案1】:

    您正在使用 reduce 的最后一个参数显式初始化它。将该零更改为其他值,您会看到输出发生变化。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

    【讨论】:

      【解决方案2】:

      简单的解释是,(count, [from, to])的计数是一个累加值,我们将初始值定义为reduce方法的第二个参数

      let initialValue = 0;//Or whatever value
      console.log(
      
        ranges.reduce((count, [from, to]) => {
            return count + (to - from);
          }, initialValue);
      

      );

      【讨论】:

        【解决方案3】:

        let ranges = [[125184, 125259], [125264, 125274], [125278, 125280]];
        
            console.log(
        
              ranges.reduce((count, [from, to]) => {    // count gets 0 initially
              console.log('count->', count, 'from->', from, 'to->', to)
                  return count + (to - from);
                }, 0)              // passing initial value to count
        
          );

        所以,最初count 将 0 作为您传递的默认值。之后,初始调用计数将包含函数返回的任何内容(请参阅.reduce() 中的日志)。

        您调用reduce() 的数组是一个array,其中包含长度为2 的array。所以,第二个参数是一个长度为 2 的数组([from, to]),因为.reduce() 将一个接一个地迭代它并获得那些内部数组。现在,这些数组将使用array destructuring assgnment 成为destructured,并将收集在fromto 变量中。

        因此,在第一次迭代中,您将内部数组 (to - from) 的差异添加到 0 并返回它。对于第二次迭代,您从第一次 (75) 返回的值将是 count 变量的值,依此类推..

        你可以阅读更多关于.reduce()here的信息。

        【讨论】:

        • 谢谢。我还有最后一件事我不清楚。第二个参数[from, to] --> 能否详细解释一下from实际是如何得到它的初始值125184以及如何得到125259的?出于某种原因,我对 reduce 如何从数组中的数组中提取这些值感到困惑。
        • @StevenTidd 在第二个参数中array destructuring 被使用(更新了我的答案)。 reduce() 正在遍历您的 ranges 数组并返回长度为 2 的内部数组(一个接一个)。现在,Destructuring 用于将数组的第一个元素 分配给from 变量,将第二个元素 分配给to 变量。例如:var [a, b] = [10, 20] 现在,a 将有 10 个,b 将有 20 个。有关详细信息,请参阅我在 ans(updated) 中提到的链接。
        猜你喜欢
        • 2016-12-25
        • 2016-03-22
        • 2015-07-25
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        相关资源
        最近更新 更多