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

JS實現(xiàn)的幾個常用算法

 更新時間:2016年11月12日 17:10:35   作者:雨簾輕掛  
本文給大家分享日常中比較熟悉的常用的幾個算法用JS的實現(xiàn),非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧

(1)數(shù)組去重

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

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

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

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

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

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

var quickSort = function(arr){
  if(arr.length <= 1){
    return arr;
  }
  //定義一個左數(shù)組,定義一個右數(shù)組
  let leftArr = [];
  let rightArr = [];
  //選定一個參照值
  let tag = arr[0];
  /*
   * 使用如下方式判斷,會把重復(fù)元素去掉,就實現(xiàn)了快排的同時去重
   */
  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)計字符串中出現(xiàn)次數(shù)最多的字符

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

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

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

原理:就是一個變量替換,思路很巧妙,只能用于數(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; 實現(xiàn)了將b的值賦給a
  b = a - b; // b = a - (b - a) = 2a - b 相當(dāng)于 2b = 2a;實現(xiàn)了將a的值賦給b
  return [a,b];
}

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

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

var getMaxProfit = function(arr){
  // 定義兩個變量,分別存貯最大值和最小值
  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)獲取任意長度的隨機(jī)字符串

原理:可以手動指定字符庫及隨機(jī)字符長度n,利用Math.floor()和Math.random()兩個方法實現(xiàn)獲取隨機(jī)字符。

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

以上所述是小編給大家介紹的JS實現(xiàn)的幾個常用算法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的,在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JavaScript 阻止事件默認(rèn)行為的幾種方法

    JavaScript 阻止事件默認(rèn)行為的幾種方法

    在JavaScript中,事件默認(rèn)行為是指在特定的事件發(fā)生時瀏覽器自動執(zhí)行的操作,本文主要介紹了JavaScript 阻止事件默認(rèn)行為,感興趣的可以了解一下
    2024-05-05
  • js canvas實現(xiàn)擦除動畫

    js canvas實現(xiàn)擦除動畫

    在移動設(shè)備上將某張圖片擦掉顯示另一張圖片,利用canvas來實現(xiàn)這篇文章就為大家詳細(xì)介紹了js canvas實現(xiàn)擦除動畫的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • JS實現(xiàn)定時任務(wù)每隔N秒請求后臺setInterval定時和ajax請求問題

    JS實現(xiàn)定時任務(wù)每隔N秒請求后臺setInterval定時和ajax請求問題

    這篇文章主要介紹了JS實現(xiàn)定時任務(wù)每隔N秒請求后臺setInterval定時和ajax請求 的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • 原生JavaScript實現(xiàn)輪播圖

    原生JavaScript實現(xiàn)輪播圖

    這篇文章主要為大家詳細(xì)介紹了原生JavaScript實現(xiàn)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • window.setInterval()方法的定義和用法及offsetLeft與style.left的區(qū)別

    window.setInterval()方法的定義和用法及offsetLeft與style.left的區(qū)別

    window.setInterval()方法可以按照指定的周期執(zhí)行來執(zhí)行一段程序。周期是以毫秒為單位的,本文給大家介紹window.setInterval()方法的定義和用法,感興趣的朋友參考下
    2015-11-11
  • 利用JavaScript做數(shù)獨的完整實現(xiàn)過程

    利用JavaScript做數(shù)獨的完整實現(xiàn)過程

    數(shù)獨游戲是在一個9*9的方格中進(jìn)行填數(shù)字的游戲,需要滿足的規(guī)則是每行每列和每個子九宮格都是1~9的不重復(fù)數(shù)字,下面這篇文章主要給大家介紹了關(guān)于如何利用JavaScript做數(shù)獨的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 一文詳解JavaScript中的'BigInt'用法

    一文詳解JavaScript中的'BigInt'用法

    BigInt是ES2020中引入的新的原始數(shù)據(jù)類型。它允許程序員使用更大的整數(shù)值,以匹配需要處理的數(shù)據(jù)集。在這篇博客中,我們將探討B(tài)igInt的用法和它與其他相似方法的區(qū)別,感興趣的可以了解一下
    2023-04-04
  • JavaScript中的私有成員

    JavaScript中的私有成員

    JavaScript中的私有成員...
    2006-09-09
  • JS實現(xiàn)為表格動態(tài)添加標(biāo)題的方法

    JS實現(xiàn)為表格動態(tài)添加標(biāo)題的方法

    這篇文章主要介紹了JS實現(xiàn)為表格動態(tài)添加標(biāo)題的方法,涉及javascript中createCaption方法添加標(biāo)題的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • ES6入門教程之變量的解構(gòu)賦值詳解

    ES6入門教程之變量的解構(gòu)賦值詳解

    這篇文章主要給大家介紹了關(guān)于ES6入門教程之變量的解構(gòu)賦值的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ES6具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論

石景山区| 敦煌市| 海宁市| 玉门市| 边坝县| 遂平县| 区。| 乌恰县| 精河县| 珲春市| 青神县| 岳阳市| 大同县| 大理市| 塔河县| 普定县| 林芝县| 大竹县| 洛南县| 凤城市| 白河县| 宁津县| 五华县| 桦南县| 静乐县| 曲周县| 和平县| 恩施市| 平乐县| 房产| 桑日县| 云和县| 襄垣县| 库尔勒市| 汝城县| 武冈市| 广州市| 陆良县| 西宁市| 济宁市| 罗城|