高阶函数 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("")// 将数组转为 numbervar 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: 123456console.log(string2int('12300')); // output: 12300console.log(string2int('0')); // output: 0console.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)``radix 为 1,不在范围内,错误返回 NaN。
第三次:parseInt(3, 2)``radix 为 2,在范围内,二进制范围是 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]
