常見(jiàn)代碼整理

常見(jiàn)代碼

1. 淺拷貝

1. function shallowClone(data) {
      if(typeof data !== 'object') return data
      // let obj = Object.prototype.toString.call(data) === '[object Array]' ? [] : {}
      let obj = data instanceof Array ? [] : {}
      for (let key in data) {
        if (data.hasOwnProperty(key)) {
          obj[key] = data[key]
        }
      }
      return obj
    }
2. Object.assign({}, data)

2. 深拷貝

1. function deepClone(data) {
      if(typeof data !== 'object') return data
      // let obj = Object.prototype.toString.call(data) === '[object Array]' ? [] : {}
      let obj = data instanceof Array ? [] : {}
      for (let key in data) {
        if (data.hasOwnProperty(key)) {
          obj[key] = deepClone(data[key])
        }
      }
      return obj
    }
2. JSON.parse(JSON.stringify(data))

3. 函數(shù)防抖

function debounce(fn, duration) {
   let timer = null
   return (...args) => {
      if(timer) clearTimeout(timer)
      timer = setTimeout(() => {
         fn.apply(this, args)
         clearTimeout(timer)
      }, duration)
   }
}

4. 函數(shù)節(jié)流

function throttle(fn ,duration) {
   let flag = true
   return (...args) => {
      if(!flag) return
      flag = false
      setTimeout(() => {
         fn.apply(this, args)
         flag = true
      }, duration)
   }
}

5. 常見(jiàn)算法

  1. 冒泡排序
function bubbleSort(array) {
  const length = array.length
  // 外層循環(huán)決定每次遍歷到數(shù)組哪一位置
  for (let i = length - 1; i > 0; i--) {
    // 內(nèi)層循環(huán)對(duì)單次遍歷進(jìn)行兩兩元素對(duì)比交換操作
    for (let j = 0; j < i; j++) {
      if (array[j] > array[j + 1]) {
        let temp = array[j]
        array[j] = array[j + 1]
        array[j + 1] = temp
      }
    }
  }
  return array
}
平均時(shí)間復(fù)雜度 最好情況 最壞情況 空間復(fù)雜度 穩(wěn)定性
O(n2) O(n) O(n2) O(1) 穩(wěn)定
  1. 選擇排序
function selectionSort(array) {
  const length = array.length
  // 外層循環(huán)決定每次遍歷的最小元素放置位置
  for (let i = 0; i < length - 1; i++) {
    let min = i
    // 內(nèi)層循環(huán)對(duì)該位置后面所有元素進(jìn)行對(duì)比找蜜,查找最小元素下標(biāo)并交換
    for (let j = min + 1; j < length; j++) {
      if (array[j] < array[min]) {
        min = j
      }
    }
    let temp = array[i]
    array[i] = array[min]
    array[min] = temp
  }
  return array
}
平均時(shí)間復(fù)雜度 最好情況 最壞情況 空間復(fù)雜度 穩(wěn)定性
O(n2) O(n2) O(n2) O(1) 不穩(wěn)定
  1. 插入排序
function insertionSort(array) {
  const length = array.length
  // 外層循環(huán)從第二個(gè)元素開(kāi)始遍歷到最后元素
  for (let i = 1; i < length; i++) {
    let temp = array[i]
    let j = i
    // 內(nèi)層循環(huán)查找該元素在前面的有序數(shù)列中的放置位置
    while (j > 0 && array[j - 1] > temp) {
      array[j] = array[j - 1]
      j -= 1
    }
    array[j] = temp
  }
  return array
}
平均時(shí)間復(fù)雜度 最好情況 最壞情況 空間復(fù)雜度 穩(wěn)定性
O(n2) O(n) O(n2) O(1) 穩(wěn)定
  1. 希爾排序
function shellSort(array) {
  const length = array.length
  // 同插入排序,多了gap間隔值
  let gap = Math.floor(length / 2)
  while (gap > 0) {
    for (let i = gap; i < length; i++) {
      let temp = array[i]
      let j = i
      while (j > gap - 1 && array[j - gap] > temp) {
        array[j] = array[j - gap]
        j -= gap
      }
      array[j] = temp
    }
    gap = Math.floor(gap / 2)
  }
  return array
}
平均時(shí)間復(fù)雜度 最好情況 最壞情況 空間復(fù)雜度 穩(wěn)定性
O(nlog(n)) O(n) O(n2) O(1) 不穩(wěn)定
  1. 快速排序
  • 指針?lè)?/li>
function quickSort(array, left, right) {
  if (left >= right) {
    return array
  }
  let i = left
  let j = right
  const pivot = array[left]
  while (i < j) {
    while (i < j && array[j] >= pivot) {
      j--
    }
    while (i < j && array[i] <= pivot) {
      i++
    }
    if (i < j) {
      let temp = array[i]
      array[i] = array[j]
      array[j] = temp
    }
  }
  array[left] = array[i]
  array[i] = pivot
  quickSort(array, left, i - 1)
  quickSort(array, i + 1, right)
  return array
}
  • 數(shù)組法
function quickSort(array) {
  const length = array.length
  if (length <= 1) {
    return array
  }
  const smaller = []
  const bigger = []
  const pivot = array[0]
  for (let i = 1; i < length; i++) {
    if (array[i] <= pivot) {
       smaller.push(array[i])
    } else {
      bigger.push(array[i])
    }
  }
  return quickSort(smaller).concat(Array.of(pivot).concat(quickSort(bigger)))
}
平均時(shí)間復(fù)雜度 最好情況 最壞情況 空間復(fù)雜度 穩(wěn)定性
O(nlog(n)) O(nlog(n)) O(n2) O(log(n)) 不穩(wěn)定
  1. 二分查找(折半查找)
  • 遞歸實(shí)現(xiàn)
function binarySearch(array, left, right, key) {
  if (left > right) {
      return -1
  }
  const center = Math.floor((left + right) / 2)
  if (array[center] === key) {
    return center
  } else if (array[center] > key) {
    right = center - 1
    return binarySearch(array, left, right, key)
  } else {
    left = center + 1
    return binarySearch(array, left, right, key)
  }
}
  • 非遞歸實(shí)現(xiàn)
function binarySearch(array, key) {
  let left = 0
  let right = array.length - 1
  if (left > right) {
      return -1
  }
  while (left <= right) {
    const center = Math.floor((left + right) / 2)
    if (array[center] === key) {
      return center
    } else if (array[center] > key) {
      right = center - 1
    } else {
      left = center + 1  
    }
  }
  return -1
}

6. 斐波那契數(shù)列

function fibonacci(n) {
  return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(5)) // 1 1 2 3 5
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載劲适,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者斩跌。
  • 序言:七十年代末病蛉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腰鬼,更是在濱河造成了極大的恐慌赐稽,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件党瓮,死亡現(xiàn)場(chǎng)離奇詭異详炬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)寞奸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)呛谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人枪萄,你說(shuō)我怎么就攤上這事隐岛。” “怎么了瓷翻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵聚凹,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我齐帚,道長(zhǎng)妒牙,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任对妄,我火速辦了婚禮湘今,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剪菱。我一直安慰自己摩瞎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布孝常。 她就那樣靜靜地躺著旗们,像睡著了一般。 火紅的嫁衣襯著肌膚如雪构灸。 梳的紋絲不亂的頭發(fā)上蚪拦,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音冻押,去河邊找鬼。 笑死盛嘿,一個(gè)胖子當(dāng)著我的面吹牛洛巢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播次兆,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼稿茉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起漓库,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恃慧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后渺蒿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體痢士,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年茂装,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怠蹂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡少态,死狀恐怖城侧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彼妻,我是刑警寧澤嫌佑,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站侨歉,受9級(jí)特大地震影響屋摇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜为肮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一摊册、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颊艳,春花似錦茅特、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至重斑,卻和暖如春兵睛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窥浪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工祖很, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漾脂。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓假颇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親骨稿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笨鸡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • It is not worth the while to let our imperfections distur...
    文心武士閱讀 218評(píng)論 0 0
  • 鮮松茸和干松茸的食用方法一樣嗎姜钳? 市場(chǎng)上的松茸在購(gòu)買(mǎi)的時(shí)候一般是有幾種選擇,分別是新鮮松茸和干松茸以及凍干松茸等形耗,...
    松茸鼎閱讀 183評(píng)論 0 0
  • 陽(yáng)光正好哥桥,窗外的一切似乎都在蠢蠢欲動(dòng),這是被壓抑許久之后的躁動(dòng)激涤,花鳥(niǎo)魚(yú)蟲(chóng)人拟糕,皆如此 不知是我的住處樓層較高的原因,...
    ilovepeace閱讀 230評(píng)論 0 0
  • 我看見(jiàn)一朵花 開(kāi)在春天里 開(kāi)在烈日下 開(kāi)在寒冬里 …… 最后 她開(kāi)在我心里
    木子超然閱讀 476評(píng)論 6 5
  • 五一放假昔期,舍友都要回家已卸,可是我沒(méi)搶到票在學(xué)校也覺(jué)著無(wú)聊就來(lái)了一場(chǎng)說(shuō)走就走的旅行。 正巧學(xué)校里有好多人也想一起去硼一,也...
    蝸牛遇到鹽閱讀 370評(píng)論 1 11