这里题目是来自廖雪峰的教程map/reduce,这两天在学习reduce
时总是弄不懂它的参数,作了他里面的几个题目,清晰了不少,固然了我第一次作题目时,彻底没头绪,基本是看了下面的评论才理解的,前辈们的博客是很好的学习资料。segmentfault
题目一:利用reduce
求积函数
var arr = [1,2,3,4,5]; arr.reduce((x,y) => x*y)
题目二:字符串13579
先变成Array
——[1, 3, 5, 7, 9]
,再利用reduce()
把字符串转换为Number
的函数。学习
var str = '13579'; var a = str.split(''); console.log(a); // ["1", "3", "5", "7", "9"] var b = a.map((x) => +x); console.log(b); // [1, 3, 5, 7, 9] var c = b.reduce((x,y) => x*10+y); console.log(typeof c); //number //str.split('').map((x) => +x).reduce((x,y) => x*10+y);
作这题时,本身是看了评论才会,不理解的地方就一步步用console.log()
一个个打印出来。评论区里有人说+x
和x*1
是什么意思,其实用console.log()
打印出来就知道是啥意思了,就是把字符串变成数字;对于reduce
参数的理解:我认为它接受的函数的第一个参数是每次操做的结果,第二个参数是每次操做的内容,不知道可不能够这样理解,reduce
的第二个参数是初始值。3d
题目三:请把用户输入的不规范的英文名字,变为首字母大写,其余小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。code
function normalize(arr) { return arr.map((x) => { return x.charAt(0).toUpperCase() + x.slice(1).toLowerCase(); }); }
charAt()
从一个字符串中返回指定的字符slice()
从开始到结束,若是只有一个参数,到最后orm
题目四:小明但愿利用map()把字符串变成整数,他写的代码很简洁:教程
var arr = ['1', '2', '3']; var r; r = arr.map(parseInt); console.log(r); //[1, NaN, NaN] r = arr.map(x => parseInt(x)); console.log(r) //[1,2,3]
parseInt()
接受两个参数:第一个参数是须要转换成数字的字符串,第二个参数是基数,默认是0
,10进制,若是是小于2
或者大于36
,则返回NaN
map()
和forEach()
同样接受三个参数:value
key
array
,Array基本概念有介绍。因此:
第一次接受到的参数是map('1',0,[1,2,3])
,parseInt('1',0)
,结果为1
第二次接受到的参数是map('2',1,[1,2,3])
,parseInt('2',1)
,结果为NaN
第三次接受到的参数是map('3',2,[1,2,3])
,parseInt('3',2)
,结果为NaN
字符串