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

更新於 2024/04/02閱讀時間約 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
14會員
20內容數
從藝術領域轉職到前端工程師,喜歡書寫學習歷程和技術文件,掌握經驗與隨時提取的感覺很好。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Ann Chou的沙龍 的其他內容
Node 對我來說一直是很似懂非懂的概念,因為沒有實際可見的數字或字串實物可以觀察中間步驟,比起其他解題抽象許多。以下解題方法來自網友與 GPT 提供的答案,我想在本文中嘗試自己做視覺化圖解,說明 CodeWars - Can you get the loop ? 的解題思路。
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
分享這套功能齊全,視覺超級可愛還有響應式變化,教學文件又很容易閱讀的套件 Evo Calendar。 當初在製作 JS side project 時,想找一個與 VCalendar 視覺相近的套件,但多半都不合意。六角學院指派的 side project 教練也幫我找了另一個純 JS 的範例,也很
不喜歡 HTML 原生的時間選擇器外型嗎?試試看 flatpickr.js 吧! 以下是使用 flatpickr 做簡單的示例,以及 flatpickr 使用注意事項。
我依舊維持著修習 JS 的步伐,但我仍然覺得自己對 JS 的熟悉度不足。在 JS 班開課後,我藉由刷題庫和做 side project 專題,填補了課前的不自信感和知識焦慮。最終我們小組在 2.5 個月內開發了一個訂閱制電商網站的前後台,我也參加了 F2E week1 完賽,獲得銀級徽章
這是我參加為期三個月的六角學院 2023 網頁前端切版直播班中的學習和成長經驗。最初參加直播班時誤以為自己已經具備足夠的前端知識,但後來發現自己的程式碼還有改進的空間。我在參與直播班的過程中,不僅學到了更多切版技術,也在小組協作中體驗到了組織能力和團隊合作的重要性,並從做設計稿與切版中發現個人優勢。
Node 對我來說一直是很似懂非懂的概念,因為沒有實際可見的數字或字串實物可以觀察中間步驟,比起其他解題抽象許多。以下解題方法來自網友與 GPT 提供的答案,我想在本文中嘗試自己做視覺化圖解,說明 CodeWars - Can you get the loop ? 的解題思路。
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
分享這套功能齊全,視覺超級可愛還有響應式變化,教學文件又很容易閱讀的套件 Evo Calendar。 當初在製作 JS side project 時,想找一個與 VCalendar 視覺相近的套件,但多半都不合意。六角學院指派的 side project 教練也幫我找了另一個純 JS 的範例,也很
不喜歡 HTML 原生的時間選擇器外型嗎?試試看 flatpickr.js 吧! 以下是使用 flatpickr 做簡單的示例,以及 flatpickr 使用注意事項。
我依舊維持著修習 JS 的步伐,但我仍然覺得自己對 JS 的熟悉度不足。在 JS 班開課後,我藉由刷題庫和做 side project 專題,填補了課前的不自信感和知識焦慮。最終我們小組在 2.5 個月內開發了一個訂閱制電商網站的前後台,我也參加了 F2E week1 完賽,獲得銀級徽章
這是我參加為期三個月的六角學院 2023 網頁前端切版直播班中的學習和成長經驗。最初參加直播班時誤以為自己已經具備足夠的前端知識,但後來發現自己的程式碼還有改進的空間。我在參與直播班的過程中,不僅學到了更多切版技術,也在小組協作中體驗到了組織能力和團隊合作的重要性,並從做設計稿與切版中發現個人優勢。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
我們的思維常常呈現網狀結構,涉及大量相關訊息,表達和行動需要線性思維,而網狀思維與線性思維不相匹配,中間隔著關鍵的一步,即讓網狀思維變得有邏輯和組織。 金字塔原理的核心價值就在於找到一套系統方法,建構一個層級清晰、邏輯清晰的樹狀思維。 只有完成這一步,從思考到表達、從思考到行動的道路才算是完整的。
Thumbnail
書名: 別再扯自己後腿了:全美最佳精神科醫師 教你戰勝自我挫敗,解決各種難題 作者: 馬克.葛斯登, 菲利浦.高德堡  ISBN/ISSN:9789861755779
Thumbnail
上一篇講了『麥肯錫最強問題解決法』一書中有關『問題分解』的內容,這一篇要談『問題分析』的部分,這邊再複習一下書中所列出的『七步驟』:『定義問題』,『分解』,『排序』,『計畫』,『分析』,『統合』,『溝通』。
Thumbnail
現在許多職能之所以稀缺較難以取代,就在於這些職能並非只是日常規律性的操作行為,而是能解決問題,解決某些人的痛點。醫師解決人健康上的問題,產品設計者解決消費者需求方面的問題,工程師解決技術進展上的問題,等等,這都圍繞在解決問題這個核心技能上。 本書提供更高層次的分析與解決問題流程。
Thumbnail
報考培訓飛行員的基本關卡,還有包含多益的口說寫作測驗。本篇文章分享多益口說五大題的模板、技巧以及解題攻略,希望能在考試的道路上,助讀者一臂之力!
★有時面對複雜的問題,答案其實很簡單。 ●你可以做任何事,但是不能做所有的事。至少不是在同一時間進行。 ●抱持「少即是多」的態度,設定數量少一些但意義多一些的目標,面對人生、工作及一切,就會珍惜已經擁有的一切。 ●當時間的投資者,而非時間的管理者。
★我們要學會運用邏輯思考,去洞悉問題的本質。所謂洞悉本質,就是分析問題的真正原因所在,並找出正確的解決方法,進而解決問題。從這個角度看,問題解決的前提就是洞悉問題的本質。 ●一個問題如果真想得到終極解決,光靠歸納表面現象和解決表面問題是絕對做不到的,關鍵要推測出事情的本源。
Thumbnail
閱讀筆記(97)《造局者》引領時代者,屬於正在解決未來的問題   一般的管理者,看到問題解決問題;   優秀的管理者,解決現在的潛在問題;   頂尖的管理者,佈局未來將到來的問題。 上述的三條,是過去在讀管理大師杜拉克(Peter Drucker)所收穫到的感悟。 對應到這時代裡,能夠創造未
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
我們的思維常常呈現網狀結構,涉及大量相關訊息,表達和行動需要線性思維,而網狀思維與線性思維不相匹配,中間隔著關鍵的一步,即讓網狀思維變得有邏輯和組織。 金字塔原理的核心價值就在於找到一套系統方法,建構一個層級清晰、邏輯清晰的樹狀思維。 只有完成這一步,從思考到表達、從思考到行動的道路才算是完整的。
Thumbnail
書名: 別再扯自己後腿了:全美最佳精神科醫師 教你戰勝自我挫敗,解決各種難題 作者: 馬克.葛斯登, 菲利浦.高德堡  ISBN/ISSN:9789861755779
Thumbnail
上一篇講了『麥肯錫最強問題解決法』一書中有關『問題分解』的內容,這一篇要談『問題分析』的部分,這邊再複習一下書中所列出的『七步驟』:『定義問題』,『分解』,『排序』,『計畫』,『分析』,『統合』,『溝通』。
Thumbnail
現在許多職能之所以稀缺較難以取代,就在於這些職能並非只是日常規律性的操作行為,而是能解決問題,解決某些人的痛點。醫師解決人健康上的問題,產品設計者解決消費者需求方面的問題,工程師解決技術進展上的問題,等等,這都圍繞在解決問題這個核心技能上。 本書提供更高層次的分析與解決問題流程。
Thumbnail
報考培訓飛行員的基本關卡,還有包含多益的口說寫作測驗。本篇文章分享多益口說五大題的模板、技巧以及解題攻略,希望能在考試的道路上,助讀者一臂之力!
★有時面對複雜的問題,答案其實很簡單。 ●你可以做任何事,但是不能做所有的事。至少不是在同一時間進行。 ●抱持「少即是多」的態度,設定數量少一些但意義多一些的目標,面對人生、工作及一切,就會珍惜已經擁有的一切。 ●當時間的投資者,而非時間的管理者。
★我們要學會運用邏輯思考,去洞悉問題的本質。所謂洞悉本質,就是分析問題的真正原因所在,並找出正確的解決方法,進而解決問題。從這個角度看,問題解決的前提就是洞悉問題的本質。 ●一個問題如果真想得到終極解決,光靠歸納表面現象和解決表面問題是絕對做不到的,關鍵要推測出事情的本源。
Thumbnail
閱讀筆記(97)《造局者》引領時代者,屬於正在解決未來的問題   一般的管理者,看到問題解決問題;   優秀的管理者,解決現在的潛在問題;   頂尖的管理者,佈局未來將到來的問題。 上述的三條,是過去在讀管理大師杜拉克(Peter Drucker)所收穫到的感悟。 對應到這時代裡,能夠創造未