iT邦幫忙

2022 iThome 鐵人賽

0
自我挑戰組

30 天線上自學前端系列 第 49

[Day 49] [JavaScript] ES6 - reduce

  • 分享至 

  • xImage
  •  

map:[Day 47] [JavaScript] ES6 map & forEach
filter:[Day 48] [JavaScript] ES6 - filter

今天是上 map / filter / reduce 的組合中最後一個 function:reduce!


ES6 sandbox 裡面有的題目:

✅ //Map -Create a new array by doing something with each item in an array.

✅ //Filter - Create a new array by keeping the items that return true.

⇨⇨⇨ //Reduce - Accumulate a value by doing something to each item in an array.

//Find - find the first item that matches from an array.

//FindIndex - find the index of the first item that matches.


Reduce

對每個 array 裡面的 item 來做些什麼事,來累加 value。

var numbers = [9, 10, 11];

比如說可以把 numbers 裡面所有的 item 加起來。

要完成以上的結果,也可以用 forEach

var numbers = [9, 10, 11];

var newNum = 0;

numbers.forEach(
  function(num){
    newNum = newNum + num  //或是: newNum += num
  }
);

console.log(newNum)
//30

Reduce 的話,就會變得比較簡潔些,至少可以少一個變數:

var numbers = [9, 10, 11];

// var newNum = 0;    這邊是由Accumulate替代,所以不用這個變數了。

var newNum = numbers.reduce(
  function(Accumulate, num){
    return  Accumulate + num
  }
);

console.log(newNum)

另外也可以用 console.log 看一下這個 function 是怎麼運作的:

var numbers = [9, 10, 11];

// var newNum = 0;

var newNum = numbers.reduce(
  function(Accumulate, num){
    console.log('Accumulate'+Accumulate);
    console.log('num'+num);
    return  Accumulate + num;
  }
);

console.log(newNum)

結果是這樣:

Accumulate9 
num10 
Accumulate19 
num11 
30

所以就可以很清楚地知道,第一次運算的時候,Accumulate 已經設定第一個 item 為第一個 value,然後 num 是第二個 item 為第二個 value。再下一次運算的時候,Accumulatenum 已經相加好,並且要加上 num 新的值(下個 item)並運算出最終的結果。

下一次的課程會是 find function 的介紹~


上一篇
[Day 48] [JavaScript] ES6 - filter
下一篇
[Day 50] [JavaScript] ES6 - find、substring ,以及 JSON 裡找資料和過濾字數的小挑戰
系列文
30 天線上自學前端72
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言