使用js實現單鏈解決前端隊列問題


使用js實現單鏈解決前端隊列問題


使用場景

  • 比如前端需要處理什麼隊列一類的業務
  • 比如有人下單,需要彈出什麼彈窗

接收一個 數組對象:items

class ChainQueue {  constructor(items) {    this.items = items || []    this.maxNum = 200  }}

為隊列添加數組隊列

// 添加數組隊列entryArrQueue(node) {  Array.isArray(node)  node.map(item => this.items.push(item))}

為當前隊列添加單個對象

// 添加隊列entryQueue(node) {  if (this.items.length > this.maxNum) {    return  }  if (Array.isArray(node)) {    node.map(item => this.items.push(item))  } else {    this.items.push(node)  }}

刪除隊列,返回刪除的當前的項目

deleteQueue(func = () => {}) {  assert(isFunc(func), `${func} is not function`)  func(this.items.shift())}

返回隊列的第一個

front() {  return this.items[0]}
清除隊列
clear() {  this.items = []}

所有代碼

const isFunc = v => typeof v === 'function'const assert = (condition, msg) => {  if (!condition) throw new Error(`[dashboard]${msg}`)}class ChainQueue {  constructor(items) {    this.items = items || []    this.maxNum = 200  }  // 添加數組隊列  entryArrQueue(node) {    Array.isArray(node)    node.map(item => this.items.push(item))  }  // 添加隊列  entryQueue(node) {    if (this.items.length > this.maxNum) {      return    }    if (Array.isArray(node)) {      node.map(item => this.items.push(item))    } else {      this.items.push(node)    }  }  // 刪除隊列,返回刪除的當前的項目  deleteQueue(func = () => {}) {    assert(isFunc(func), `${func} is not function`)    func(this.items.shift())  }  // 返回隊列的第一個  front() {    return this.items[0]  }  // 清除隊列  clear() {    this.items = []  }  get size() {    return this.items.length  }  get isEmpty() {    return !this.items.length  }  print() {    console.log(this.items.toString())    console.log(this.items)  }  result() {    return this.items  }}module.exports = ChainQueue// export default ChainQueue// export default (ChainQueue = new ChainQueue())


分享到:


相關文章: