學習JavaScript數據結構與算法 (一)


學習JavaScript數據結構與算法 的筆記, 包含一二三章

01基礎

循環

  • 斐波那契數列
var fibonaci = [1,1]
for (var i = 2; i< 20;i++) {
  fibonaci[i] = fibonaci[i-1] + fibonaci[i-2]
}

02數組

添加和刪除元素

  • push: 放到最后
  • pop: 取最后一個
  • unshift: 放到第一個
  • shifit: 取第一個
  • push 和 pop 模擬棧
  • unshift 和 pop 模擬隊列
// 因為最后引用了一個i+1, 但是i已經是小於length的最小索引
var arr = [0,1,2,3,4,5]
for (var i = 0;i<arr.length;i++) {
  arr[i] = arr[i+1]
}
console.log(arr) // [ 1, 2, 3, 4, 5, undefined ]
  • pop和shift可以改變數組的長度
  • pop和shift不接受傳參
  • spilce(index, length, ...補充的元素)取出數組中間的元素, 並返回
  • splice改變原數組

多維數組矩陣

數組常用方法

數組合並

  • concat: 可以合並多個數組
  • 參數如果是數組, 進行解析合並.
  • 如果不是數組, 例如對象, 函數, 或者其他類型的話, 會直接作為元素添加上去

迭代

  • map: 遍歷返回新數組, 每一項由新的組成, 不改變原數組
  • forEach: 遍歷數組, 沒有返回結果, 不改變數組. 但是可以通過參數進行改變
  • some: 一項返回true, 就是true
  • every: 每一項都返回true, 才是true
  • filter: 返回一個返回值true的值, 組成的新數組
  • reduce: (pre, cur, index, arr) 每一項的結果向后疊加, 並返回新的操作結果

排序

  • reverse: 反轉
  • sort, (a, b) 接受一個函數參數. 根據函數返回的結果, 返回負數, a>b, a在前面
var arr = [1, 5, 4]
// a, b兩個數相比較, 返回小於0的數的話, a 放到前面
arr.sort((a, b) => {
  return a - b
})
console.log(arr) [1,4,5]
  • 封裝數組中是對象, 然后根據對象中的某個特定屬性進行排列
var obj1 = {
  age: 20
}
var obj2 = {
  age: 10
}
var arr = [obj1, obj2]

arr.sort(comp('age'))


function comp(key) {
  return (a, b) => {
    return a[key] - b[key]
  }
}
console.dir(arr)
  • 重點: 返回的小於0的話, 那么這個值就在前面.

搜索

  • indexOf
  • lastIndexOf

數組輸出為字符串

  • join: 按照指定的字符拼接數組的每一項, 返回. 如果什么都不傳的話, 就是toString
  • toString

03棧

后進先出, 也是編譯器中保存遍歷, 方法調用等的方式

實現棧

class Stack {
  constructor () {
    this.items = []
  }
  push(item) {
    return this.items.push(item)
  }
  pop() {
    return this.items.pop()
  }
  peek() {
    return this.items[this.items.length - 1]
  }
  isEmpty() {
    return this.items.length === 0
  }
  clear() {
    return this.items = []
  }
  size() {
    return this.items.length
  }
}

利用棧實現十進制轉其他進制

  • 因為每一次取余后, 都是一次壓棧操作, 放到最里面
  • 操作完成后, 是出棧操作, 也就是從最上面開始取
  • 按照順序出棧, 拼接為字符串即可
function divideBy(num, base) {
  var stack = new Stack, res = ''
  while (num > 0) {
    var rem = Math.floor(num % base)
    stack.push(rem)
    num = Math.floor(num / base)
  }
  while(!stack.isEmpty()) {
    res += stack.pop()
  }
  return res
}
var num = 10
console.log(divideBy(10, 8))
console.log(num.toString(8))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM