Day 18
別把我頭上的角取下來,這樣我就被 Shift 了。不過也好,這樣我看起來會比較正常。
前一篇我們認識了從陣列的頭部加上一個或多個元素的unshift()
,今天要介紹的是從陣列的開端刪除元素的shift()
,這一對陣列方法,都屬於佇列(Queue)「先進先出 FIFO」的資料結構。
我們再來以此圖複習一下:
shift() 幫我把頭拿下來
使用shift()
方法,會移除陣列的第一個元素,也就是索引值為零的元素,並把這個元素的值回傳回來。也就是說,它會永遠回傳原陣列的第一個元素。
Array.prototype.shift() - JavaScript | MDN
原型: Array.prototype.shift()
功能: 會移除並回傳陣列的第一個元素。
改變: 此方法會改變原陣列的長度和內容。
語法: arr.shift()
回傳值: 自陣列中移除的元素;若陣列為空,則會回傳 undefined。
參數: 無
我們先來看一下用法:
1 | const arr = [1, 2, 3, 4, 5]; |
陣列中索引值為零的元素,就是第一個元素 廢話,執行之後,shift()
會將隨後的其他元素的索引值減一(往前移一位)。假如陣列已經被清空,也就是 length 屬性的值是 0,shift()
就會回傳 undefined 給我們。
1 | const arr = [1, 2]; |
如果第一個元素是物件類型的資料?
即使想要處理的陣列裡,有包含物件類型的元素,如陣列或物件,shift()
也會乖乖的把它傳回來,字串也是如此。 實在是好聽話
1 | const arr = [{ a: 42 }, 'Hi', 24]; |
如果陣列裡的元素包含無效的資料?
如果陣列裡頭包含了undefined
、null
或者是NaN
,在使用shift()
時會回傳什麼呢? 它還是很聽話shift()
還是會把這些無效的值回傳給我們。
1 | const arr3 = [undefined, null, NaN]; |
多此一舉的徒勞
使用shift()
是不需要給參數的,所以,即使我們給它一些奇怪的參數,它也會無動於衷,做它該做的事,而且還不會報錯。shift()
只會完全忽略這些參數。 終於有個性了起來不過,會這樣做存粹是實驗,了解shift()
就不會這樣玩弄它。
1 | const arr = [1, 2, 3, 4, 5]; |
shift() 是如何辦到刪除第一個元素的?
接下來我們來看看 shift()
可能是這樣被寫出來的程式碼:
先把第一個元素,也就是索引值是零的元素抓出來,接下來利用for
迴圈把剩下的值做索引值的位移。然後,再把位移後的結果去掉最後一個元素,再回傳最開始抓到的第一個值。
1 | // 這裡的 this 是原要處理的陣列 |
以下為shift2
裡的for
迴圈運作步驟:
1 | 以上面的例子 this 長度是 5 |
今天的shift()
就介紹到這裡,希望看完這篇會更清楚shift()
的運作原理。另外,今天是本人鐵人賽的第 18 天,但是還有一拖車的陣列方法要介紹啊!
這次的鐵人賽絕對是無法介紹完的,但是本人會默默地、不定期的繼續把陣列方法介紹下去。因為,鐵人結束後,本人是不可能變鐵人的,所以還是要繼續學習才是,對吧?
如有需要改進的地方,拜託懇求請告知,我會盡量快速度修改,感謝您~