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('测试失败!');
}