reduce & forEach & map 使用
資料來源:還是來自 http://www.codewars.com/
事情的經過是:
有一個運算的規則如下-
89 --> 8¹ + 9² = 89 * 1
695 --> 6² + 9³ + 5⁴= 1390 = 695 * 2
46288 --> 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
例外:無法整除 回傳 -1
解決開始-
方法一 純使用 forEach(這也是胖喵一開始唯一想到的方法@@ 技術素養不足阿 >.<)
附註說明 :以第一個規則範例來說上 n:代表89,p:代表起始次方數
function mathTest(n, p) {
//將參數1 利用match回傳單一數字組合陣列
var digits = n.toString().match(/\d{1}/g);
var sum = 0;
//將每一個元素利用forEach列出,並利用 pow 函數加總
digits.forEach(function (element) {
sum += Math.pow(parseInt(element), p);
p++;
});
//看看有沒有錯@@
console.log(sum);
//規則是 若加總數字餘數為0 => 回傳整除數字 or 回傳 -1
return sum % n == 0 ? parseInt(sum / n) : -1;
}
方法二 混搭 reduce & map
function mathTest(n,p){
//利用split拆成單一數字陣列
var ans = n.toString().split('')
//將每一個數字利用map進行 pow處理
.map((value,index) => Math.pow(parseInt(value), index+p)) .
//最後把數字利用reduce進行累加,最後再除以 n
reduce((prev,current) => prev+current) / n;
//判斷結果的餘數是否 0
return ans%1 == 0 ? ans : -1;
}
小心得:這個javascript映射的機制 真的很像C# lambda (java 8好像也出生了)@@...看來不學會就落伍啦...謝謝收看