javascript reduce() forEach() map() 小紀錄

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好像也出生了)@@...看來不學會就落伍啦...謝謝收看