iT邦幫忙

1

【JavaScript】陣列方法之forEach()

  • 分享至 

  • xImage
  •  

【前言】
本系列為個人前端學習之路的學習筆記,在過往的學習過程中累積了很多筆記,如今想藉著IT邦幫忙這個平台做整理+再複習。
本系列標題一律以【】標示該篇文章主要涉及的內容,例如【JavaScript】、【Vue】等等。
若內容有誤,還麻煩各路大神不吝於點出問題,感激不敬。


在JavaScript中有許多操作陣列的方法,本篇將針對forEach()
forEach()如同跑for迴圈一樣,陣列.forEach(callback function)會將陣列中的資料一筆一筆作為參數帶入callback function中,如同用for迴圈操作陣列一樣,可以對陣列內容進行各種操作,是泛用度非常高的方法

例如如果我們想將陣列中的每一筆資料用console.log()印出來,我們用for迴圈可能會這樣做:

const array = [1, 2, 3, 4, 5];
for(let i=0;i<array.length;i++){
  console.log(array[i]);
}

但有了forEach()之後我們可以這樣寫:

const array = [1, 2, 3, 4, 5];
array.forEach(function(item, index, array){
  console.log(item);
});

原先我們在for迴圈中會需要宣告i,然後用array[i]來取得每一筆資料
但在forEach()的callback function中,每筆資料會被當作第一筆參數帶入,並自動執行陣列長度次數次
聽起來有點拗口,以這個案例來說就是會跑5次,item每次分別是1~5這樣

在forEach()的callback function中有三個參數
如同陣列方法之filter()中提到的一樣
第一個是陣列資料本身,以這個案例來說就是array的資料,這裡我將參數名稱命名為item
第二個是陣列資料的索引位置
第三個則是陣列本身,通常用到的機會不多
同樣的,參數名稱都是可以自訂的,但forEach()一定會照著這個順序,這點與filter()相同

forEach()不會回傳值

不像filter()需要return資料到新陣列,forEach()本身相當單純,可以把它想成只有陣列可以使用的高級for迴圈
如果強行加入return是沒有意義的,並有辦法透過forEach()中的callback function去return任何東西:

const array = [1, 2, 3, 4, 5];
const newArray = array.forEach(function(item, index, array){
  return item
});
console.log(newArray); //undefined

毫無反應,就只是默默地跑5次

而大部分像用filter()或是map()做到的效果其實forEach()也可以做到,不過可能稍微不漂亮一些
陣列方法之filter()中的範例為例,這個範例目的是「將大於3的資料放到新陣列」:

const array = [1, 2, 3, 4, 5];
const newArray = array.filter(function(item, index, array){
  return item > 3;
});
console.log(newArray); //[4, 5]

用forEach()改寫:

const array = [1, 2, 3, 4, 5];
const newArray = [];
array.forEach(function(item, index, array){
  if(item > 3){
    newArray.push(item);
  }
});
console.log(newArray); //[4, 5]

雖然步驟多了一點點,但也說明forEach()的萬用性


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言