reduce

    再看reduce的用法。Array的 reduce() 把一个函数作用在这个 Array [x1, x2, x3…] 上,这个函数必须接收两个参数, reduce() 把结果继续和序列的下一个元素做累积计算,其效果就是:

    [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

    比方说对一个 Array 求和,就可以用 reduce 实现:

    var arr = [1, 3, 5, 7, 9];

    arr.reduce(function (x, y) {

    return x + y;

    }); // 25

    练习:利用 reduce() 求积:

    'use strict';



    function product(arr) {



    return 0;



    }



    // 测试:

    if (product([1, 2, 3, 4]) === 24 && product([0, 1, 2]) === 0 && product([99, 88, 77, 66]) === 44274384) {

    alert('测试通过!');

    }

    else {

    alert('测试失败!');

    }

    要把 [1, 3, 5, 7, 9] 变换成整数13579, reduce() 也能派上用场:

    var arr = [1, 3, 5, 7, 9];

    arr.reduce(function (x, y) {

    return x * 10 + y;

    }); // 13579

    如果我们继续改进这个例子,想办法把一个字符串 13579 先变成 Array —— [1, 3, 5, 7, 9] ,再利用 reduce() 就可以写出一个把字符串转换为Number的函数。

    练习:不要使用JavaScript内置的 parseInt() 函数,利用map和reduce操作实现一个 string2int() 函数:

    'use strict';



    function string2int(s) {



    return 0;



    }



    // 测试:

    if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {

    if (string2int.toString().indexOf('parseInt') !== -1) {

    alert('请勿使用parseInt()!');

    } else if (string2int.toString().indexOf('Number') !== -1) {

    alert('请勿使用Number()!');

    } else {

    alert('测试通过!');

    }

    }

    else {

    alert('测试失败!');

    }