map、reduce练习

254 阅读1分钟

利用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进制。
	这个参数的意义是指把前面的字符看作多少进制的数字,所谓的基数。