Tag: reduce

  • 学习了JavaScript中的reduce

    之前一直没有认认真真地学习JavaScript(https://en.wikipedia.org/wiki/ECMAScript),因为一直只是将它作为在Web中进行编程,进行动态效果呈现的一个辅助脚本(我用jQuery比较多,还用过一段时间的Dart)。

    这两天因为脚扭了在家里休息了几天,随手拿起《Eloquent JavaScript》就看几段,就顺手学习了一下JavaScript中的reduce。

    完整的说明在这里

    按照定义,reduce对一个数组中的每个元素进行一个类似于“累加”的操作,将其规整到一个单一值。 它的完整语法如下:

    arr.reduce(callback[, initialValue])

    而其中的callback函数,又可以最多有四个参数:

    • previousValue
    • currentValue
    • index
    • array

    我们先看一个对数组中所有元素求和的例子:

    var total = [0, 1, 2, 3].reduce(
        function(sum, current) {
            return sum+current;
        });
    // total == 6

    这是一个非常直观的例子。 计算机程序求和总是用一个循环的方式。所以,“和”会保存在一个变量中,然后顺序一个元素一个元素的相加。

    注意,由于我们没有给出initialValue,所以在第一次运行时,sum(作为previousValue)就会取数组的第一个数值0,而此时的currentValue就会是数组的第二个元素1。在这个程序中,这么做当然是没有问题的。 我们可以将这个程序等价地写作:

    var total = [0, 1, 2, 3].reduce(
        function(sum, current) {
            return sum+current;
        }, 0);
    // total == 6

    此时我们显式地给予初始值为0(求和当然是如此),得到的结果是一致的。

    第二个例子是将多维数组“压扁”成一维数组。这也可以用reduce来完成。

    var arr=[[1,2,3],[4,5],[6,1]];
    var x=arr.reduce(
      function(flat, current)
      {
        return flat.concat(current);
      }, [])
    );

    这里必须给定initialValue。

    本文收录于[go4pro.org]