這裏問題是來自廖雪峰的教程map/reduce,這两天在進修reduce
時總是弄不懂它的參數,做了他內里的幾個問題,清楚了許多,固然了我第一次做問題時,完整沒眉目,基本是看了下面的批評才明白的,先輩們的博客是很好的進修材料。
問題一:應用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
的第二個參數是初始值。
問題三:請把用戶輸入的不範例的英文名字,變成首字母大寫,其他小寫的範例名字。輸入:[‘adam’, ‘LISA’, ‘barT’],輸出:[‘Adam’, ‘Lisa’, ‘Bart’]。
function normalize(arr) {
return arr.map((x) => {
return x.charAt(0).toUpperCase() +
x.slice(1).toLowerCase();
});
}
charAt()
從一個字符串中返回指定的字符slice()
從最先到完畢,假如只要一個參數,到最後
問題四:小明願望應用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