欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS常用算法實現代碼

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

本文的主要目的是幫助大家熟悉熟悉常用的幾個算法用JS的實現,具體內容如下

(1)數組去重

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

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

(2)使用快速排序算法對數組進行排序

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

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

特別注意:還有與標志位相等的元素,如果你存儲相等的元素,就實現了去重,如果存儲了,就不去重。

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

(3)統計字符串中出現次數最多的字符

原理:這個和數組去重類似,也是利用一個對象obj,將數組元素作為對象的屬性名,如果不存在該屬性名,則值賦為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)不借助第三個變量實現兩個變量交換值

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

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; 實現了將b的值賦給a
  b = a - b; // b = a - (b - a) = 2a - b 相當于 2b = 2a;實現了將a的值賦給b
  return [a,b];
}

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

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

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)獲取任意長度的隨機字符串

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 原生javascript圖片自動或手動切換示例附演示源碼

    原生javascript圖片自動或手動切換示例附演示源碼

    圖片自動或手動切換,想必會在很多地方有見過吧,本文將為大家介紹的是使用原生javascript實現的焦點圖切換,感興趣的朋友可以參考下
    2013-09-09
  • Iphone手機、安卓手機瀏覽器控制默認縮放大小的方法總結(附代碼)

    Iphone手機、安卓手機瀏覽器控制默認縮放大小的方法總結(附代碼)

    這篇文章主要介紹了Iphone手機、安卓手機瀏覽器控制默認縮放大小的方法,通過meta標簽中添加屬性代碼展示控制瀏覽器的默認縮放,具體操作步驟大家可查看下文的詳細講解,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • js項目中雙向數據綁定的簡單實現方法

    js項目中雙向數據綁定的簡單實現方法

    雙向數據綁定指的就是,綁定對象屬性的改變到用戶界面的變化的能力,反之亦然,下面這篇文章主要給大家介紹了關于js項目中雙向數據綁定的簡單實現方法,需要的朋友可以參考下
    2021-08-08
  • JS實現仿騰訊微博無刷新刪除微博效果代碼

    JS實現仿騰訊微博無刷新刪除微博效果代碼

    這篇文章主要介紹了JS實現仿騰訊微博無刷新刪除微博效果代碼,涉及JavaScript實現Ajax無刷新刪除的相關實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • png在IE6 下無法透明的解決方法匯總

    png在IE6 下無法透明的解決方法匯總

    解決PNG圖片在IE6下的透明這類問題谷歌上很多解決方案,屬于非常常見的問題,以前我做的時候,這類透明我都是用gif,而直接避開png,所以到現在我并沒有去了解過這個問題。今天就把這個問題整理下,解決方案匯總給大家。
    2015-05-05
  • Javascript中的return作用及javascript return關鍵字用法詳解

    Javascript中的return作用及javascript return關鍵字用法詳解

    本文給大家介紹Javascript中的return作用及javascript return關鍵字用法詳解,對于大家學習javascript中的return知識有所幫助,感興趣的朋友一起學習吧
    2015-11-11
  • 淺談bootstrap layer.open中end的使用方法

    淺談bootstrap layer.open中end的使用方法

    今天小編就為大家分享一篇淺談bootstrap layer.open中end的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • js獲取時間(本周、本季度、本月..)

    js獲取時間(本周、本季度、本月..)

    js獲取時間,包括:獲取本周、本季度、本月、上月的開端日期、停止日期,下面有個不錯的示例,感興趣的朋友可以參考下
    2013-11-11
  • JavaScript 批量創(chuàng)建數組的方法

    JavaScript 批量創(chuàng)建數組的方法

    JavaScript有許多批量創(chuàng)建數組的方法,為了衡量它們的性能,我分別使用不同的方法創(chuàng)建一個長度為100000的數組,且鍵和值相等,今天小編給大家分享基于js批量創(chuàng)建數組的方法,一起看看吧
    2017-03-03
  • 原生JS實現的簡單輪播圖功能【適合新手】

    原生JS實現的簡單輪播圖功能【適合新手】

    這篇文章主要介紹了原生JS實現的簡單輪播圖功能,結合實例形式分析了基于javascript定時器控制頁面元素動態(tài)變換實現輪播圖的相關操作技巧,需要的朋友可以參考下
    2018-08-08

最新評論