最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS常用算法實(shí)現(xiàn)代碼

 更新時(shí)間:2016年11月14日 08:31:32   作者:雨簾輕掛  
這篇文章主要為大家詳細(xì)介紹了用JS常用幾個(gè)算法的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文的主要目的是幫助大家熟悉熟悉常用的幾個(gè)算法用JS的實(shí)現(xiàn),具體內(nèi)容如下

(1)數(shù)組去重

原理:定義一個(gè)對(duì)象obj,然后把數(shù)組元素作為obj的屬性名,利用屬性名是否重復(fù)進(jìn)行判重

var unique = function(arr){
  let obj = {};
  let newArr = [];
  arr.forEach(function(x){
    if(!obj[x]){ //如果對(duì)象中沒(méi)有該元素對(duì)應(yīng)的屬性
      obj[x] = true;
      newArr.push(x);
    }
  });
  return newArr;
}

(2)使用快速排序算法對(duì)數(shù)組進(jìn)行排序

這里面包括兩種效果,一種是利用快排的特性實(shí)現(xiàn)了去重快排,另一種是不去重的快排。

原理:獲得目標(biāo)數(shù)組,選定一個(gè)元素最為標(biāo)志位,遍歷剩余的元素,比標(biāo)志位大放右邊,比標(biāo)志位小放左邊。

特別注意:還有與標(biāo)志位相等的元素,如果你存儲(chǔ)相等的元素,就實(shí)現(xiàn)了去重,如果存儲(chǔ)了,就不去重。

var quickSort = function(arr){
  
  if(arr.length <= 1){
    return arr;
  }
  
  //定義一個(gè)左數(shù)組,定義一個(gè)右數(shù)組
  let leftArr = [];
  let rightArr = [];
  //選定一個(gè)參照值
  let tag = arr[0];
  
  /*
   * 使用如下方式判斷,會(huì)把重復(fù)元素去掉,就實(shí)現(xiàn)了快排的同時(shí)去重
   */
  for(let i = 0; i < arr.length; i++){
    if(arr[i] < tag){ //將比tag小的元素放在左數(shù)組中
      leftArr.push(arr[i]);
    }
    if(arr[i] > tag){ //將比tag大的元素放在右數(shù)組中
      rightArr.push(arr[i]);
    }
  }
  
  /*
   * 使用如下方式就是使用快排進(jìn)行排序,不去重
   */
  for(let i = 1; i < arr.length; i++){
    if(arr[i] < tag){ //將比tag小的元素放在左數(shù)組中
      leftArr.push(arr[i]);
    }else{ //將比tag大的元素放在右數(shù)組中
      rightArr.push(arr[i]);
    }
  }
  
  //遞歸調(diào)用
  return [].concat(quickSort(leftArr),[tag],quickSort(rightArr));
}

(3)統(tǒng)計(jì)字符串中出現(xiàn)次數(shù)最多的字符

原理:這個(gè)和數(shù)組去重類(lèi)似,也是利用一個(gè)對(duì)象obj,將數(shù)組元素作為對(duì)象的屬性名,如果不存在該屬性名,則值賦為1,如果存在,則值加1。

var maxShowTimes = function(str){
  // 創(chuàng)建一個(gè)用于判重的對(duì)象
  let obj = {};
  // 判斷字符串是否為空或只有一個(gè)元素
  if(str.length <= 1){
    return str.length === 0?'字符串不能為空':str;
  }
  // 利用String的charAt()方法獲取各個(gè)字符
  for(let i = 0; i <= str.length; i++){
    if(!obj[str.charAt(i)]){ //如果不存在
      obj[str.charAt(i)] = 1; 
    }else{ //如果存在
      obj[str.charAt(i)] += 1;
    }
  }
  
  // 在obj對(duì)象中尋找值最大的那個(gè)屬性
  let maxChar = '';
  let maxTimes = 0;
  for(var k in obj){
    if(obj[k] > maxTimes){
      maxChar = k;
      maxTimes = obj[k];
    }
  }
  return maxChar;
}

(4)不借助第三個(gè)變量實(shí)現(xiàn)兩個(gè)變量交換值

原理:就是一個(gè)變量替換,思路很巧妙,只能用于數(shù)字的交換。

var swap = function(a,b){
  if(a === b){
    return [a,b];
  }
  b = b - a; // 此處的 b - a中的b和a的值是最初的值
  a = a + b; // a = a + b -a; 實(shí)現(xiàn)了將b的值賦給a
  b = a - b; // b = a - (b - a) = 2a - b 相當(dāng)于 2b = 2a;實(shí)現(xiàn)了將a的值賦給b
  return [a,b];
}

(5)求一個(gè)數(shù)組的最大差值

原理:遍歷一次數(shù)組,找到最大值和最小值,返回差值

var getMaxProfit = function(arr){
  // 定義兩個(gè)變量,分別存貯最大值和最小值
  let maxNum = arr[0];
  let minNum = arr[0];
  for(let i = 0; i < arr.length; i++){
    if(arr[i] > maxNum){
      maxNum = arr[i];
    }
    if(arr[i] < minNum){
      minNum = arr[i];
    }
  }
  return maxNum - minNum;
}

(6)獲取任意長(zhǎng)度的隨機(jī)字符串

原理:可以手動(dòng)指定字符庫(kù)及隨機(jī)字符長(zhǎng)度n,利用Math.floor()和Math.random()兩個(gè)方法實(shí)現(xiàn)獲取隨機(jī)字符。

var getRandomString = function(n){
  // 定義隨機(jī)字符串的字符庫(kù)
  let str = 'qwertyuiopasdfghjklzxcvbnm1234567890';
  // 定義一個(gè)臨時(shí)變量tmp存儲(chǔ)生成的隨機(jī)字符串
  let tmp = '';
  //獲取str的長(zhǎng)度
  let len = str.length;
  // 生成一個(gè)長(zhǎng)度為n的隨機(jī)字符串
  for(let i = 0; i < n; i++){
    tmp += str.charAt(Math.floor(Math.random() * len));
  }
  return tmp;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • three.js中點(diǎn)對(duì)象(Point)和點(diǎn)材質(zhì)(PointsMaterial)的具體使用

    three.js中點(diǎn)對(duì)象(Point)和點(diǎn)材質(zhì)(PointsMaterial)的具體使用

    本文主要介紹了three.js中點(diǎn)對(duì)象(Point)和點(diǎn)材質(zhì)(PointsMaterial)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 為什么js中不推薦使用eval函數(shù)(原因分析)

    為什么js中不推薦使用eval函數(shù)(原因分析)

    'eval'函數(shù)是javascript中的一個(gè)內(nèi)置函數(shù),它的主要作用是將傳入的字符串作為代碼來(lái)執(zhí)行,這篇文章主要介紹了為什么js中不推薦使用eval函數(shù),需要的朋友可以參考下
    2023-10-10
  • bootstrap table動(dòng)態(tài)加載數(shù)據(jù)示例代碼

    bootstrap table動(dòng)態(tài)加載數(shù)據(jù)示例代碼

    本篇文章主要介紹了bootstrap table動(dòng)態(tài)加載數(shù)據(jù)示例代碼,可以實(shí)現(xiàn)點(diǎn)擊選擇按鈕,彈出模態(tài)框,加載出關(guān)鍵詞列表,有興趣的可以了解一下。
    2017-03-03
  • javascript動(dòng)畫(huà)之磁性吸附效果篇

    javascript動(dòng)畫(huà)之磁性吸附效果篇

    在實(shí)際應(yīng)用中,常常需要為拖拽的元素限定范圍。而通過(guò)限定范圍,再增加一些輔助的措施,就可以實(shí)現(xiàn)磁性吸附的效果。本文將詳細(xì)介紹javascript的磁性吸附,有需要的朋友可以參考借鑒。
    2016-12-12
  • 原生JS封裝vue Tab切換效果

    原生JS封裝vue Tab切換效果

    這篇文章主要為大家詳細(xì)介紹了原生JS封裝vue Tab切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • JavaScript 實(shí)現(xiàn) Tab 點(diǎn)擊切換實(shí)例代碼

    JavaScript 實(shí)現(xiàn) Tab 點(diǎn)擊切換實(shí)例代碼

    Tab 選項(xiàng)卡切換效果在現(xiàn)如今的網(wǎng)頁(yè)中,運(yùn)用的也是比較多的,包括點(diǎn)擊切換、滑動(dòng)切換、延遲切換、自動(dòng)切換等多種效果,在這篇博文里,我們是通過(guò)原生 JavaScript 來(lái)實(shí)現(xiàn) Tab 點(diǎn)擊切換的效果。
    2017-03-03
  • 如何自己實(shí)現(xiàn)JavaScript的new操作符

    如何自己實(shí)現(xiàn)JavaScript的new操作符

    new大家肯定都不陌生,單身沒(méi)有對(duì)象的時(shí)候就new一個(gè),很方便。那么它在創(chuàng)建實(shí)例的時(shí)候,具體做了哪些操作呢?今天我們就來(lái)一起分析一下。
    2021-04-04
  • uni-app使用uni.navigateTo傳遞對(duì)象參數(shù)示例代碼

    uni-app使用uni.navigateTo傳遞對(duì)象參數(shù)示例代碼

    最近在做微信小程序用的是uniapp開(kāi)發(fā)的,自己記錄一下,也和大家分享一下,這篇文章主要給大家介紹了關(guān)于uni-app使用uni.navigateTo傳遞對(duì)象參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • TypeOf這些知識(shí)點(diǎn)你了解嗎

    TypeOf這些知識(shí)點(diǎn)你了解嗎

    昨天給同事一起玩耍,同事給我出了一道代碼題目,是關(guān)于typeof的,感覺(jué)挺好玩的,在此分享給大家,順便鞏固下自己對(duì)typeof知識(shí)點(diǎn)的總結(jié)
    2016-02-02
  • 小程序rich-text組件如何改變內(nèi)部img圖片樣式的方法

    小程序rich-text組件如何改變內(nèi)部img圖片樣式的方法

    這篇文章主要介紹了小程序rich-text組件如何改變內(nèi)部img圖片樣式的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05

最新評(píng)論

平安县| 明溪县| 九龙城区| 高安市| 蒙山县| 松滋市| 和静县| 阳东县| 中西区| 临江市| 霍州市| 福州市| 梁山县| 南雄市| 盐亭县| 彩票| 昌江| 建瓯市| 枣庄市| 潞城市| 聂拉木县| 中宁县| 固始县| 榆树市| 锦屏县| 枞阳县| 泸定县| 长汀县| 呼和浩特市| 巴楚县| 清丰县| 兰州市| 泰宁县| 嘉祥县| 黄大仙区| 曲阳县| 扶沟县| 东港市| 来安县| 北流市| 腾冲县|