這裏題目是來自廖雪峯的教程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
字符串