1.方法說明 , Array的reduce()
把一個函數作用在這個Array
的[x1, x2, x3...]
上,這個函數必須接收兩個參數,reduce()
把結果繼續和序列的下一個元素做累積計算,其效果就是:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
2. 使用示例:
2.1不要使用JavaScript內置的parseInt()
函數,利用map和reduce操作實現一個string2int()
函數:
'use strict'; function string2int(s){ if(!s){ alert('the params empty'); return; } if(s.length===1){ return s*1; } var arr = []; for(var i=0; i<s.length; i++){ arr.push(s.substr(i, 1)*1); } return arr.reduce(function(x, y){ return x*10 + y; }); } // 測試: if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) { if (string2int.toString().indexOf('parseInt') !== -1) { alert('請勿使用parseInt()!'); } else if (string2int.toString().indexOf('Number') !== -1) { alert('請勿使用Number()!'); } else { alert('測試通過!'); } } else { alert('測試失敗!'); }
2.2 把用戶輸入的不規范的英文名字,變為首字母大寫,其他小寫的規范名字。輸入:['adam', 'LISA', 'barT']
,輸出:['Adam', 'Lisa', 'Bart']
。
'use strict'; function normalize(arr){ if(!arr){ alert('the arr is empty!'); return; } return arr.map(function(s){ var temparr = []; for(var j=0; j<s.length; j++){ var str = s.substr(j, 1); if(j===0){ str = str.toUpperCase(); }else{ str = str.toLowerCase(); } temparr.push(str); } s = temparr.reduce(function(x, y){ return x + y; }); return s; }); } // 測試: if (normalize(['adam', 'LISA', 'barT']).toString() === ['Adam', 'Lisa', 'Bart'].toString()) { alert('測試通過!'); } else { alert('測試失敗!'); }