javascript reduce函数实现
参考自js学习
再看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()求积:
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
当忽略参数 radix , JavaScript 默认数字的基数如下:
如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
'use strict';
function product(arr) {
return arr.reduce(function (x,y) {
return parseInt(x)*parseInt(y);
});
}
// 测试:
if (product([1, 2, 3, 4]) === 24 && product([0, 1, 2]) === 0 && product([99, 88, 77, 66]) === 44274384) {
console.log('测试通过!');
}
else {
console.log('测试失败!');
练习:
不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数:
'use strict';
function string2int(s) {
function str2num(str){
var strArr = str.split(''); //把字符串分割成字符串数组
function toInt(data){
return +data; //通过js的弱类型转换,实现字符类型到数字类型的转换
}
var numArr = strArr.map(toInt); //通过map()把字符串数组转换成数字数组
return numArr;
}
var num = str2num(s);
var res = num.reduce(function (x,y) { //通过reduce()把数字数组转换成数字量
return x*10+y;
});
return res;
}
// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
if (string2int.toString().indexOf('parseInt') !== -1) {
console.log('请勿使用parseInt()!');
} else if (string2int.toString().indexOf('Number') !== -1) {
console.log('请勿使用Number()!');
} else {
console.log('测试通过!');
}
}
else {
console.log('测试失败!');
}
练习:
请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]。
'use strict';
function normalize(arr) {
function strs(str){
str=str.toLowerCase();//先都小写
let x1 = str.substring(0, 1).toUpperCase();//提取第一个进行大写
let x2 = str.substring(1);//提取该元素的后面
return x1+x2;
}
return arr.map(strs)
}
// 测试:
if (normalize(['adam', 'LISA', 'barT']).toString() === ['Adam', 'Lisa', 'Bart'].toString()) {
console.log('测试通过!');
}
else {
console.log('测试失败!');
}
练习:希望利用map()把字符串变成整数
'use strict';
var arr = ['1', '2', '3'];
var r;
r = arr.map(r=>parseInt(r));
console.log(r);