連JS陣列遍歷都打不斷,還敢稱自己為高階前端?

Mondo 科技 更新 2024-01-30

我採訪了乙個自稱是高階前端,精通JS,精通VUE,工作了6年的人。 我們也不玩假設,讓他感受面試製造火箭,工作搞砸,然後是真實的東西。

問1:你知道JS有什麼方法可以實現陣列遍歷嗎?

答1:for、for in、for of、foreach、map 等,無論如何都可以用來遍歷”。

問2:那麼這些方法可以中斷哪些呢?

答2:好像 for can't,好像 for in 可以,..語無倫次,陷入沉思。

來吧,女士們,先生們,如果你不知道,那麼你可以閱讀這篇文章收藏夾 + 喜歡鼓勵揮手。

forfor/infor/ofarray.foreacharray.maparray.reducearray.filterarray.somearray.每種方法都不會一一嘮叨,這裡是關鍵點。

重要提示:for in 以任意順序遍歷物件的可列舉屬性(符號除外)。 因此,for in 通常用於遍歷物件。 for of 在可迭代物件(包括arraymapsetstringtypedarray、引數、物件等),呼叫自定義迭代鉤子,並為每個不同屬性的值執行語句。因此,for of 通常用於遍歷陣列。 注意:

對於in是無序的,需要注意遍歷的使用,參考:js puzzle-object中的key是有序的嗎?什麼可列舉?仔細看看: 可列舉的突出顯示示例:

兩者都要遍歷物件 let obj = ;// for/infor (var o in obj) ;// output// id// name// for/offor (var o of obj) ;Error 物件不是迭代器,不能用於 VM319:1 Uncaught TypeError: Obj is not iterable
正如你所看到的,因為不能遍歷乙個物件。

兩者都遍歷陣列 let ary = ['a', 'b', 'c'];注意:陣列也是乙個特殊的物件,我新增了乙個屬性aryname = 'james'; // for/infor (var o in ary) ;輸出列印陣列索引和 Name 屬性的值(注意)!// 0// 1// 2// james// for/offor (var o of ary) ;輸出僅列印每個元素 a、b、c 的陣列
所以for/ofES6的出現也在一定程度上得到了補償for/in遍歷陣列中的缺陷。

重要提示:建立乙個新陣列(不要忘記將map將結果分配給遍歷,否則將浪費遍歷)原始陣列不受影響(除非您將map什麼時候foreach使用,直接在迴圈中修改原始陣列的值)新陣列的每個結果都是 ** 函式中返回的值(如果你的 ** 函式忘記了)。reture新陣列的每個元素都是undefined典型錯誤案例:

map用於遍歷陣列,map,直接修改原陣列的值

錯誤示例:

let demoary = [,demoary.map(item => )console.log(demoary);
正確示例:

let demoary = [, 方法一:foreach 遍歷陣列 demoaryforeach(item => )console.log(demoary);方法二:map生成乙個新陣列來替換原來的陣列demoary = demoarymap(item => )console.log(demoary);
要點:

生成新結果,結果取決於 ** 函式return原始陣列的值不受影響(除非你把它reduce什麼時候foreach使用,直接在迴圈中修改原始陣列的值)來接收 2 個引數,callbackinitialvaluecallback有 4 個引數:累計值當前值當前指數原始值,一般使用前2個引數initialvalue或者,如果省略預設的第乙個元素,但如果陣列也是空的,則將收到乙個錯誤,其中包含重要示例:

有初始值 [1, 2, 3, 4, 5]。reduce((acc, cur) => ,100);輸出迭代 5 次,最後返回 115 100 1 101 2 103 3 106 4 110 5 115 的整數和
如果沒有初始值,遍歷將少 1,因為陣列的第乙個結果充當迭代器的第乙個值。

沒有初始值 [1, 2, 3, 4, 5]。reduce((acc, cur) => ) 輸出迭代 4 次,最後返回 15 1 2 3 3 6 4 10 5 15 的 int 和結果
兩者都用於確定陣列中是否存在滿足條件的元素,並返回結果trueorfalse重要提示:同時使用這兩種方法時,必須明確何時使用它們return true or false確定結果

亮點示例:

// some[1, 2, 3, 4, 5].some(item => ;預設值為 false,可以省略。 這意味著它找不到,它將繼續遍歷並找到陣列的最後乙個返回值 false;}) 輸出迭代 3 次,找到結果並返回 true 1 2 3 true
// every[1, 2, 3, 4, 5].every(item => ;預設值為 false,必須寫入。 如果沒有明確說明這個時間是真的,說明第乙個元素不合適,會直接退出。  return true;}) 輸出迭代 3 次,發現不合適的結果並返回 false 1 2 3 false
我們先來看看如何破解陣列遍歷:

BreakThrowReturnContinue(立即結束此迴圈,**不執行後繼續,進入下一輪迴圈,認為中止當前迴圈,幾乎不計入) forfor ofarraysomearray.我們想要的這些方法中的每一種:中斷陣列的常用方法是array.somearray.every,因為在中斷陣列遍歷之前必須滿足某些條件,對吧?使用這兩種句法糖可能更合適。

// for breaklet ary = [1, 2, 3, 4, 5];for (let i=0; i< ary.length; i++)// output// 0// 1// 2// 3// --// for continuefor (let i=0; i< ary.length; i++)console.log('after=', i);} 輸出 請注意,沒有 after=3 before= 0 after= 0 before= 1 after= 1 before= 2 after= 2 before= 3 before= 4 after= 4 after= 4
// for/of breaklet ary = [1, 2, 3, 4, 5];for (let o of ary) ;// output// 1// 2// 3// --// for/of continuefor (let o of ary) ;console.log('after=', o);} 輸出 請注意,沒有 after=3 before= 1 after= 1 before= 2 after= 2 after= 2 before= 3 before= 4 after= 4 before= 5 after= 5 after= 5
參考上面的用法,不再重複。

這兩種方法與以下方面有關:forfor/of需要注意的區別在於它們破壞了語法return它不能使用breakcontinue

相關問題答案

    如何輸入陣列,你知道這些技巧嗎?

    在程式設計中,陣列是一種常見的資料結構,用於儲存一系列有序元素。在不同的程式語言中,輸入陣列的方法會有所不同,但基本概念和思想是相似的。下面我將提供一些輸入陣列的基本步驟和常見技巧,希望對您有所幫助。指定陣列的維度 在使用陣列之前,您需要清楚陣列的維度。對於一維陣列,您可以簡單地建立乙個元素列表 對...

    快船隊從6連敗變成了7連敗!你可能沒有注意到有乙個人只打了 0 分鐘

    在連敗之後,鉗團隊進行了一系列調整,成功扭轉了局面。最重要的變化是改變首發陣容,讓威斯布魯克替補出場曼成為首發。此調整使硬化再次發揮他的作用,通過他的組織和領導能力,團隊的整體效率得到了顯著提高。另外鉗陣容也進行了調整,部分球員被棄用,進一步提公升了球隊的戰鬥力。為了應對連敗的窘境,鉗球隊採取了改變...

    快船隊從6連敗變成了7連敗!你可能沒有注意到,有乙個人只打了 0 秒

    鉗該團隊目前在nba他們在聯賽中表現出色,取得了連勝,但在此之前,他們經歷了六連敗的艱難時期。特別硬化在加盟後的五場比賽中鉗球隊的糟糕表現讓很多人擔心他們的前景。然而鉗球隊強勢崛起,連敗多支強隊,取得七連勝。在鉗他們做了哪些調整來扭轉局面,從六連敗到七連勝?鉗球隊在連敗期間倫納德場均只有分,投籃命中...

    可以讓你連續4年虧損的資金

    再過個交易日,年就要結束了。不過,滬深指數也下跌了 看來 年線三陰 很可能逃不掉 今天再次篩選,看看哪些是基於最新的淨資產資料連續 年甚至 年 列表在這裡 恆生指數 恆生指數連續四年下跌,追蹤恆生指數和H股指數的 中,有不少指數也連續四年下跌。 芙蓉 福前 這是市場上唯一的一款連續年虧損目標 更尷尬...

    澤連斯基參演戰劇?你看起來不像是公司的中層領導

    俄烏戰爭已經持續了很長時間,不僅戰爭的各方和戰爭的支持者都不想繼續下去,甚至連現在讀到這篇文章的官員都沒有興趣。原因很明顯,一是這場戰爭的結果在一開始就已經注定了,二是巴以衝突似乎更令人擔憂。可以說,在烏克蘭我們看到了真正的 民主 不會拳擊的演員不好 烏克蘭首都基輔市長是拳擊冠軍,領隊是演員,那麼澤...