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

一、利用 reduce() 求积:

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

二、将字符串转为数字

  1. /**
  2. * 将字符串转为数字
  3. * @param s 字符串
  4. * @returns 数字
  5. */
  6. function string2int(s) {
  7. if (s.length == 1) {
  8. let k = s - 0;
  9. return k;
  10. }
  11. // 先把字符串转为数组 eg: "12345" => ["1","2","3","4","5"]
  12. var strArr = s.split("")
  13. // 将数组转为 number
  14. var k = strArr.reduce(function(x, y) {
  15. return x + y - 0;
  16. })
  17. // console.log(typeof(k)); // number
  18. // console.log(k);
  19. return k;
  20. }
  21. console.log(string2int('123456')); // output: 123456
  22. console.log(string2int('12300')); // output: 12300
  23. console.log(string2int('0')); // output: 0
  24. console.log(string2int('0123')); // output: 123

三、规范化英文名称

  1. /**
  2. * 使英文名称规范,第一个字母大写,其余小写
  3. * @param {* } arr
  4. * @returns
  5. */
  6. function normalize(arr) {
  7. // 获取第一个字母然后转为大写,获取剩下的字母转为小写,然后将两个拼接
  8. return arr.map(item =>
  9. item.slice(0, 1).toUpperCase() + item.slice(1).toLowerCase()
  10. )
  11. }
  12. 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

  1. 'use strict';
  2. var arr = ['1', '2', '3'];
  3. var r = arr.map(item =>
  4. parseInt(item)
  5. );
  6. console.log(r); // output: [1, 2, 3]
  1. 'use strict';
  2. var arr = ['1', '2', '3'];
  3. var r = arr.map(Number);
  4. console.log(r); // output: [1, 2, 3]