天天看點

前端算法能力提高(數組,隊列,棧)

馬上開學就要大四了,也就意味着要面臨就業了。接觸前端東西也已經有一年多了,做了很多,但是在面試的過程中,總免不了被問算法,之前也一直不重視,認為目前開發也用不着還不如多問我點原生js,現在觀念有一些轉變,行業這麼卷,肯定得有一些手段篩人,而算法也算是衆多公司常用的手段吧,這個也能決定你的base,是以,人家既然要求,那我們也就不要反感。盡可能的提高自己,不管用不用,隻要你要,我就有。

先從最基礎的資料結構開始:

數組

一般我們定義數組:

或者

let c = Array.from('foo124')
 console.log(c) //["f", "o", "o", "1", "2", "4"]
           

再或者

const arr = (new Array(7)).fill(1)   //[1, 1, 1, 1, 1, 1, 1]
           

fill方法是為初始化的數組填上資料

當我們修改的時候隻需要

arr[1] = 2 
 console.log(arr)  //[1, 2, 1, 1, 1, 1, 1]
           

當我們初始化數組填入的是空數組的話

const arr = (new Array(7)).fill([])
 console.log(arr) //[Array(0), Array(0), Array(0), Array(0), Array(0), Array(0), Array(0)]
           

當我們給二維數組指派的時候會發現

arr[0][0] = 1
  console.log(arr) 
           
前端算法能力提高(數組,隊列,棧)

其實我們在使用fill給數組指派[]的時候,傳入的值是一個指針,這些指針指向的是同一塊記憶體位址。其實在這我們可以想一下深淺拷貝的問題。有興趣自己去查一查或者看一下我的部落格,我之前也說過。

數組的特點

其實數組的特點就是連續存儲,我們定義一個數組,他在記憶體開辟了一段連續的記憶體空間,這點可以作為和連結清單的差別哈,先提前透一下。

數組的周遊

  • for循環
const arr = [1,2,3,4,5]
        for(let i = 0;i<arr.length;i++){
            console.log(arr[i])
        }
           
  • forEach
const arr = [1,2,3,4,5]
        arr.forEach(item=>{
            console.log(item)
        })
           
  • map
const arr = [1,2,3,4,5]
        let c = arr.map(item=>{
            return item
        })
        console.log(c)
           

forEach和map差別

他們兩個都是周遊數組的方法,不過forEach會改變原數組,map不會改變原數組,會傳回一個新數組。一般我們采用map方法的時候會對周遊資料進行再加工。

數組方法

  • shift

    删除數組首部的第一個元素(隻能删一個,裡邊傳參沒用),改變原數組,傳回删除的元素

  • unshift

    從數組首部添加元素(幾個任意),改變原數組,傳回改變後數組的長度。

  • pop

    删除數組的最後一個元素。改變原數組,傳回删除的元素

  • push

    向數組的末尾添加一個或多個元素 改變原數組,傳回改變後數組的長度。

  • filter

    比對數組中每一項,将滿足條件的那一項作為新數組傳回,不會改變原數組

  • every

    對數組中所有元素進行判斷傳回一個布爾值,如果所有元素都滿足則傳回true,否則傳回false

  • some

    對數組中元素進行判斷,如果數組中有一個元素滿足條件則傳回true否則傳回false

  • .concat

    合并兩個數組,不改變原數組,傳回合并後的新數組

  • join

    将數組轉為字元串,不改變原數組,傳回字元串

  • sort

    對數組進行排序,改變原數組,傳回的也是排序後的數組。

  • toString

    把數組轉成字元串([1,2,3]->“1,2,3”),不改變原數組,傳回的是字元串

  • reduce

    接收一個函數作為累加器,數組中的每個值(從左到右)開始縮減,最終計算為一個值。

  • Array.isArray

    判斷是不是一個數組,傳回布爾值

  • Array.from

    一般用來建立數組,或者對數組進行操作接收三個參數,第一個是可疊代對象,第二個函數可選(對每一個元素進行什麼樣的操作)第三個可選是執行函數時的this對象

大緻就是這些吧!

隊列

隊列其實就是排隊,先進去的先出來,大家可以想一下咱們前端的事件循環機制,由于js是單線程的,是以當有同步異步問題就得有一定的規則來判定讓哪個先執行,哪個後執行。規則就是同步先執行,異步後執行,異步又分微任務和宏任務,微任務先執行,宏任務再執行等等,大家可以自行查閱。如何用js來實作一個隊列呢?很簡單,就是用數組的方法,排隊:進入:push,出來:shift;

特點:先進的後出來,隻能從尾部添加元素,也隻能從尾部取元素,對應的數組方法:pop和push。

具體應用請看後續,我會一直更新前端所需算法内容,我們一起提高,遇到疑問,留言,我一定會看,文章有哪裡有問題,評論哈,畢竟我也是個垃圾

繼續閱讀