【解題筆記 - JS】陣列迭代 for...of 的 value 來源

更新於 發佈於 閱讀時間約 3 分鐘

今天想分享在網路上看到的陣列題目。

for...of 是一種陣列迭代的方法,通常 for...ofvalue 是陣列中的每個值,如果我們在迭代過程中對陣列操作會發生什麼事?

其實我一開始也答錯,看到解答才覺得「啊~其實原理很簡單,我怎麼忘了。」


題目:請問 console.log 的結果與原因?

來源:https://x.com/_jayphelps/status/1774640511158022335?s=20

const arr = [1, 2, 3];

for (const item of arr){
arr.shift()
console.log(item);
arr.push(item);
}

.

.

.

準備好了嗎?公布解答

.

.

.

結果分別是 1, 3, 3


我的解釋

  1. for...of 是一個陣列迭代器。
    我們先離開題目看,在沒有對來源陣列變更的狀態下,它是以下結果:
const arr = [1, 2, 3];

for (const item of arr){
console.log(item); // 1, 2, 3
}
  1. 其實 for...ofMDN)的 item 依賴的是一個看不見的參數 index,而 JavaScript 的 index 是從 0 起算。所以其實 itemarr[index]
const arr = [1, 2, 3];

for (const item of arr){
console.log(item);
// 第一次迭代,index 為 0,item 為 arr[0],也就是 1
// 第二次迭代,index 為 1,item 為 arr[1],也就是 2
// 第三次迭代,index 為 2,item 為 arr[2],也就是 3
}
  1. 回到題目,每次的迭代做了以下事項:
    arr.shift() → 刪除 arr 第一個值(不是指 index 1 喔!)
    arr.push(item)arr 最後面加入當下依賴 index 取得的 item
  2. 所以在每次迭代時,for (const item in arr) 中的 arr 都有變化,但產生 item 要依據的 index 依舊是 0、1、2.... 這樣增加。
    畫成圖更容易理解 for...of 中發生了什麼事情。
raw-image


出題者給的答案

解答:https://x.com/_jayphelps/status/1774642057014923608?s=20

出題者給的答案是用 for 迴圈解釋上方的 index 概念,也是一個點題卻也不破題的做法。或許出題者也需要點擊流量,就請點入上方連結觀看吧!


延伸閱讀

前陣子終於從六角的 Vue 直播班畢業了(求職中~)。

上面 index 的題目,讓我想到另一篇關於 Vuev-for 文章,v-for 是一個能將資料用列表方式渲染的手法,例如可以寫作以下方式,就可以依據 data 裡的資料數量產生相同數量的 <li>

<ul>
<li v-for="(item, idx) in data">{{ item }}</li>
// item 是 data 裡的每筆資料
// idx 是 data 中資料序列,比照陣列 index,也就是從 0、1、2...
</ul>

官方文件提到 v-for 需要搭配唯一值 key(也就是唯一的、不重複的、不變的值),否則可能出現錯誤。key 的來源可以是資料裡的唯一值,也可以是 idx,但這並不是推薦做法。因為如果我們對來源 data 內的資料做會影響順序的操作,就會產生像上面的 for...of 問題。詳細就請大家參考以下推薦文章連結了。

文章:v-for 可以使用 index 當作 key 嗎?

留言
avatar-img
留言分享你的想法!
avatar-img
Ann Chou的沙龍
17會員
29內容數
從藝術領域轉職到前端工程師,喜歡書寫學習歷程和技術文件,掌握經驗與隨時提取的感覺很好。
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
上禮拜三段考複習,出了線上習題讓學生在課堂練習,我也頭一次有時間能夠好好檢討這些額外習題。 其中有一題是出自100第一次基測(正巧就是我考的那一年),主要考圓周角與平行截角的概念。有學生在練習時有問我這題,我也給了許多提示與引導,讓他能順利完成。(如筆記中的法1)
Thumbnail
上禮拜三段考複習,出了線上習題讓學生在課堂練習,我也頭一次有時間能夠好好檢討這些額外習題。 其中有一題是出自100第一次基測(正巧就是我考的那一年),主要考圓周角與平行截角的概念。有學生在練習時有問我這題,我也給了許多提示與引導,讓他能順利完成。(如筆記中的法1)
Thumbnail
筆記型電腦是現代人工作、學習的好幫手,一旦出現問題,將嚴重影響生活與工作效率。本文將針對常見的筆記型電腦故障問題,如開機異常、電池故障、鍵盤損壞等,提供詳細的筆電維修資訊,並給予您專業的建議,幫助您快速解決問題,讓您的愛機重獲新生。
Thumbnail
筆記型電腦是現代人工作、學習的好幫手,一旦出現問題,將嚴重影響生活與工作效率。本文將針對常見的筆記型電腦故障問題,如開機異常、電池故障、鍵盤損壞等,提供詳細的筆電維修資訊,並給予您專業的建議,幫助您快速解決問題,讓您的愛機重獲新生。
Thumbnail
這篇內容,將會講解什麼是陣列,以及與陣列相關的知識。包括陣列的簡介、陣列的資料限制、陣列的維度、一維陣列、二維陣列。
Thumbnail
這篇內容,將會講解什麼是陣列,以及與陣列相關的知識。包括陣列的簡介、陣列的資料限制、陣列的維度、一維陣列、二維陣列。
Thumbnail
這本「高效率人生管理筆記」,裡頭彙整了許多筆記方法、工具,就像在你面前出現一本本的武林秘笈. 這時,你應該做的,不是急著翻開這本書,或是開始針對書中內容做一張張精美圖卡或圖解筆記(我以前就是這樣,除非你今天的目的是販售這些知識產出,這又是另一回事了)
Thumbnail
這本「高效率人生管理筆記」,裡頭彙整了許多筆記方法、工具,就像在你面前出現一本本的武林秘笈. 這時,你應該做的,不是急著翻開這本書,或是開始針對書中內容做一張張精美圖卡或圖解筆記(我以前就是這樣,除非你今天的目的是販售這些知識產出,這又是另一回事了)
Thumbnail
書中介紹策略顧問的幾個核心思考脈絡與方法,透過書中所教的思考脈絡與問題解決三大支柱:批判思考、邏輯思考、假說思考,掌握問題20%的關鍵,一一拆解並解決至少80%的問題!
Thumbnail
書中介紹策略顧問的幾個核心思考脈絡與方法,透過書中所教的思考脈絡與問題解決三大支柱:批判思考、邏輯思考、假說思考,掌握問題20%的關鍵,一一拆解並解決至少80%的問題!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News