iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
1
Modern Web

log Vue 一下系列 第 17

Vue一下 17日:聊聊ES6 一些陣列方法 forEach, map, reduce

  • 分享至 

  • xImage
  •  

影片中介紹7種方法,這裡節錄其他網站有介紹的3種
參考: 從ES6開始的JavaScript學習生活 陣列 迭代

forEach & map

這兩者使用的目的都非常近似於 for迴圈

forEach

原本for迴圈是這樣寫:

for (let i = 0; i < arrayName.length; i++){
  console.log( arrayName[i] )
}

forEach會這樣寫:

arrayName.forEach( function ( item, index, array)  {
  item.price = item.cost + 100; // 直接對陣列內元素做操作,加入新property
  console.log( item )
});

其中 index,array不一定會使用到,array指向前面呼叫forEacharray本身,即目前的arrayName
參考: MDN Array.prototype.forEach() 語法

map/filter

最大特色就是都要return,回傳成為新的陣列,舊的陣列不會被修改,更常被使用

let newArrayName = arrayName.map( function ( item, index, array){
  // statements
  return {
    ...item,
    price: item.cost +100
  }
});
console.log( newArrayName );

但它不適合放判斷式在內,因為會回傳固定長度,不符合的元素改成回傳 undefined
若要使用則用 filterfilter return的內容為布林值

let filterName = arrayName.filter( function(item, index){
  if (item.cost > 10) {
    return true
}
})

試寫了一個範例,一定要有return true
如果是

let filterName = people.filter((item, index) => {
    if (item.cost == 60000) {
      return false
    }
})

剩下的 item 不會自動return true

reduce

用來兩兩相運算(比較也是運算的一種)的方法,也就是說至少要兩個值才能使用。但它多了一個參數值,代表前項。可以賦予一個初始值,若有賦予index才會從 0 開始取,反之則從 1 開始取。

const aArray = [0, 1, 2, 3, 4]

const total = aArray.reduce(function(preValue, value, index, array){
    console.log('preValue = ', preValue, ' value = ', value, ' index = ', index)
    return pValue + value
})

console.log(aArray) // [0, 1, 2, 3, 4]
console.log(total) // 10

輸出結果會是這樣

preValue = 0 value = 1 index = 1
preValue = 1 value = 2 index = 2
preValue = 3 value = 3 index = 3
preValue = 6 value = 4 index = 4
[0, 1, 2, 3, 4]
10

注意到只有運算只有四行而不是五行,因為是從aArray[1]往前取值。如果前面沒有值(aArray[0])又需要從 0 開始取的話,就要先給初始值。初始值位置在函式之後

const total2 = aArray.reduce(function(pValue, value, index, array){
    console.log('pValue = ', pValue, ' value = ', value, ' index = ', index)
    return pValue + value
}, 10) //初始值位置在這裡~~

console.log(total2) // 20

參考: MDN Array.prototype.reduce()

小結

這部分的選擇性參數array筆者也不明白是用來用在什麼情況的,大部分範例都沒有看到被使用,之後若有使用或查到再回來分享。另外ES6篇章暫時會跟著影片的進度告一段落


上一篇
Vue一下 16日:聊聊ES6 縮寫,箭頭函式,template string
下一篇
Vue一下 18日:API - 寫 Sass/Scss的人,看到extend,會幸福吧(?) filter
系列文
log Vue 一下30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言