馬上開學就要大四了,也就意味着要面臨就業了。接觸前端東西也已經有一年多了,做了很多,但是在面試的過程中,總免不了被問算法,之前也一直不重視,認為目前開發也用不着還不如多問我點原生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。
具體應用請看後續,我會一直更新前端所需算法内容,我們一起提高,遇到疑問,留言,我一定會看,文章有哪裡有問題,評論哈,畢竟我也是個垃圾