利用reduce()求积:
function product(arr) {
var tr = arr.reduce(function(x,y){
return x * y;
});
return tr;
}
// 测试:
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()函数:
function string2int(s) {
var arry = s.split('');
console.log(arry)
var arryInt = arry.map((x)=>{
x_ = +x ;
return x_;
})
return arryInt.reduce((x,y)=>{
return x*10+y;
})
// 测试:
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']。
function normalize(arr) {
function strs(x){
let a1 = x.toLowerCase();//所有字符串小写
let x1 = a1.substring(0,1).toUpperCase();//首个字符串大写
let x2 = a1.substring(1);
sum = x1+x2
return sum;
}
return arr.map(strs)
}
// 测试:
if (normalize(['adam', 'LISA', 'barT']).toString() === ['Adam', 'Lisa', 'Bart'].toString()) {
console.log('测试通过!');
}
else {
console.log('测试失败!');
}
利用map()把字符串变成整数
var arr = ['1','2','3']
var r
r = arr.map((x)=>{
return parseInt(x)
})
//直接写成 arr.map(parseInt),得到的是1,NaN,NaN
//原因是分解后
arr.map(function(val,index){
parseInt('1',0)//0为十进制
parseInt('2',1)//没有1进制
parseInt('3',2)//2进制中超过1的值不存在
})
//parseInt(string, radix)
//string:需要转化的字符,如果不是字符串会被转换,忽视空格符。
//radix:数字2-36之间的整型。默认使用10,表示10进制。
这个参数的意义是指把前面的字符看作多少进制的数字,所谓的基数。