Discuss / JavaScript / 高阶函数 map 和 reduce 练习题题解

高阶函数 map 和 reduce 练习题题解

Topic source

云胡

#1 Created at ... [Delete] [Delete and Lock User]

高阶函数 map 和 reduce 练习题题解

一、利用 reduce() 求积:

'use strict';

var arr = [1, 2, 3, 4, 5]
var value = arr.reduce(function(x, y) {
    // 求积
		return x * y;
})
console.log(value); // output: 120

二、将字符串转为数字

/**
 * 将字符串转为数字
 * @param s 字符串
 * @returns 数字
 */
function string2int(s) {
    if (s.length == 1) {
        let k = s - 0;
        return k;
    }

    // 先把字符串转为数组 eg: "12345" => ["1","2","3","4","5"]
    var strArr = s.split("")

    // 将数组转为 number
    var k = strArr.reduce(function(x, y) {
        return x + y - 0;
    })
    // console.log(typeof(k)); // number
    // console.log(k);
    return k;
}
console.log(string2int('123456')); // output: 123456
console.log(string2int('12300'));  // output: 12300
console.log(string2int('0'));      // output: 0
console.log(string2int('0123'));   // output: 123

三、规范化英文名称

/**
 * 使英文名称规范,第一个字母大写,其余小写
 * @param {* } arr 
 * @returns 
 */

function normalize(arr) {
    // 获取第一个字母然后转为大写,获取剩下的字母转为小写,然后将两个拼接
    return arr.map(item =>
        item.slice(0, 1).toUpperCase() + item.slice(1).toLowerCase()
    )
}

console.log(normalize(["abCD", "abcD", "AbcD"])); // output:["Abcd","Abcd","Abcd"]

四、使用 map() 将字符串转为整数

parseInt(string, radix**)** 解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数。

直接在 map() 方法使用,这边的 radix 进制会引用到数组的索引。

逐一分析:

第一次:parseInt(1, 0)``0 会调用默认 10 进制,因此返回 1

第二次:parseInt(2, 1)``radix1,不在范围内,错误返回 NaN

第三次:parseInt(3, 2)``radix2,在范围内,二进制范围是 0-1超过范围,错误返回 NaN

'use strict';

var arr = ['1', '2', '3'];
var r = arr.map(item =>
    parseInt(item)
);

console.log(r); // output: [1, 2, 3]
'use strict';

var arr = ['1', '2', '3'];
var r = arr.map(Number);

console.log(r); // output: [1, 2, 3]

  • 1

Reply