• JS reduce()和reduceRight()方法:对数组元素进行迭代(累加)

    使用 JavaScript 中的 reduce() 和 reduceRight() 方法可以对数组元素的值进行迭代(或者说累加)。

    reduce() 方法

    JavaScript 中的 reduce() 方法可对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。具体用法如下:

    array.reduce(callbackfn[, initialVaule]);

    参数说明:

    • array:必需参数,一个数组对象。
    • callbackfn:必需参数,一个接受最多四个参数的函数。对于数组中的每个元素,recude() 方法都会调用 callbackfn 函数一次。
    • initialVaule:可选参数,如果指定 initialVaule,则它将用作初始值来启动累积。第一次调用 callbackfn 函数会将此值作为参数而非数组值提供。

    recude() 方法的返回值是通过最后一次调用回调函数获得的累积结果。

    如果提供了参数 initialVaule,则 reduce() 方法会对数组中的每个元素调用一次 callbackfn 函数(按升序索引顺序);如果为提供 initialVaule,则 reduce() 方法会对从第 2 个元素开始的每个元素调用 callbackfn 函数。

    回调函数的返回值在下一次调用回调函数时作为 previousValue 参数提供。最后一次调用回调函数获得的返回值为 recude() 方法的返回值。该方法不为数组中缺少的元素调用该回调函数。

    回调函数的语法如下:

    function callbackfn(previousValue, currentVaule, currentIndex, array);

    回调函数参数说明:

    • previousValue:通过上一次调用回调函数获得的值。如果向 reduce() 方法提供 initialValue,则在首次调用函数时,previousValue 为 initialValue。
    • currentVaule:当前元素数组的值。
    • currentIndex:当前数组元素的数字索引。
    • array:包含该元素的数组对象。

    在第一次调用回调函数时,作为参数提供的值取决于 reduce() 方法是否具有 initialValue 参数。如果向 recude() 方法提供 initialValue,则 previousValue 参数为 initialValue,currentValue 参数是数组中第 1 个元素的值。

    如果未提供 initialValue,则 previousValue 参数是数组中的第 1 个元素的值,currentValue 参数是数组中的第 2 个元素的值。

    示例1

    下面示例演示将数组值连接成字符串,各个值用::分隔开。由于未向 recude() 方法提供初始值,第一次调用回调函数时会将“abc”作为 previousValue 参数,并将“def”作为 currentValue参数。

    function f(pre, curr) {
        return pre + ": :" + curr;
    }
    var a = ["abc", "def", 123, 456];
    var r = a.recude(f);
    console.log(r);  //abc::def::123::456

    示例2

    下面示例向数组中添加值。currentIndex 和 array 参数用于回调函数。

    function f(pre, curr, i, array) {
        var e = (array.length - 1) - i;
        var d = curr * Math.pow(10, e);
        return pre + d;
    }
    var a = [4,1,2,5];
    var r = a.recude(f, 0);
    console.log(r);  //4125

    示例3

    下面示例获取一个数组,该数组仅包含另一个数组中的介于 1 和 10 之间的值,提供给 recude() 方法的初始值是一个空数组。

    function f(pre, curr) {
        var next;
        if (curr >= 1 && curr <= 10) {
            next = pre.concat(curr);
        } else {
            next = pre;
        }
        return next;
    }
    var a1 = [20,1,-5,6,50,3];
    var a = new Array();
    var r = a1.recude(f, a);
    console.log(r);  //1,6,3

    recudeRight() 方法

    JavaScript 中的 recudeRight() 方法可从右向左对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。具体用法如下:

    array1.reduceRight(callbackfn[, initialValue]);

    该方法的语法和用法与 reduce() 方法大概相同,唯一不同的是,它是从数组右侧开始调用回调函数。如果提供了 initialValue,则 reduceRight() 方法会按降序索引顺序对数组中的每个元素调用一次 callbackfn 函数。如果未提供 initialValue,则 reduceRight() 方法会按降序索引顺序对每个元素(从倒数第 2 个元素开始)调用 callbackfn 函数。

    示例4

    下面示例使用 reduceRight() 方法,以::为分隔符,从右到左把数组元素的值连接在一起。

    function f (pre, curr) {
        return pre + "::" + curr;
    }
    var a = ["abc", "def", 123, 456];
    var r = a.recudeRight(f);
    console.log(r);  //456::123::def::abc

更多...

加载中...