今天給大家分享一下js中常用的基礎演算法

来源:https://www.cnblogs.com/webfy/archive/2019/09/21/11563858.html
-Advertisement-
Play Games

今天給大家分享一下js中常用的基礎演算法,廢話不多說,直接上代碼; 1、兩個數字調換順序 2、對象排序,安裝對象中的id排序對象的位置; 3、冒泡排序 4、隨機出現不同的數字 5、字元串大小寫互換 6、數組隨機打亂 7、數組扁平化-把多維數組轉為一維數組 8、數組去重 9、數組尾部刪除,增加到前面; ...


    今天給大家分享一下js中常用的基礎演算法,廢話不多說,直接上代碼;

1、兩個數字調換順序

  var a = 2,b=4
  function fun(a,b){
    b = b - a ;// a = 2 ; b = 2
    a = a + b // a = 4 ; b = 2;
    b = a - b;// a = 4 ; b = 2
    return [a,b]
  }
fun(a,b)   // a = 4 ;b =  2

2、對象排序,安裝對象中的id排序對象的位置;

  var arr = [
      { nama: 'a', id: 55 },
      { nama: 'b', id: 39 },  
      { nama: 'c', id: 59 },
  ]
  var newarr = arr.sort((a,b)=>{
     return a.id - b.id;
  })

  console.log(newarr)
//  {nama: "b", id: 39}
//  {nama: "a", id: 55}
//  {nama: "c", id: 59}

3、冒泡排序 

function fun(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j + 1];
        arr[j + 1] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}
console.log(fun([1, 5, 2, 8, 3, 7])); // [1, 2, 3, 5, 7, 8]

4、隨機出現不同的數字

function fun (num){
  var arr = [];
  while(arr.length < num){
    var s = parseInt(Math.random() * 100);
    // 如果這個數組中沒有這一項才能進去;
    if(!arr.includes(s)){
      arr.push(s)
    }
  }
  return arr;
}
//  輸入幾項就會輸出幾項不同的數組;
fun(3)

5、字元串大小寫互換

function fun (n){
  let str = ''
  for(let i = 0;i < n.length;i++){
    if(n[i] == n[i].toUpperCase()){
      str += n[i].toLowerCase()
    }else{
      str += n[i].toUpperCase();
    }
  }
  return str 
}
fun('AbCd') //  aBcD

6、數組隨機打亂

function fun(arr){
  return arr.sort( ()=>{
    return Math.random() > 0.5 ? 1 : -1
  })
}
fun([1,2,3,4,5])

7、數組扁平化-把多維數組轉為一維數組

function fun (arr){
  var result = [];
  arr.forEach(item =>{
    if(Array.isArray(item)){
      result.push(...fun(item  ))
    }else{
      result.push(item)
    }
  })
  return result
}
fun([1,[2,[3,[4,[5]],6,[7]]]]); //  [1, 2, 3, 4, 5, 6, 7]

8、數組去重

function fun(arr){
  var newarr = [];
  for(let i = 0; i < arr.length;i++){
    if(!newarr.includes(arr[i])){
      newarr.push(arr[i])
    }
  }
  return newarr;
}
fun([1,1,1,2,3,3]) // [1, 2, 3]

9、數組尾部刪除,增加到前面;

//  用戶不輸入,預設1項;
function fun(arr,num = 1){
  for(let i = 0 ; i < num;i++){
    arr.unshift(arr.pop())
  }
  return arr;
}
fun([1,2,3,4]  //  [4, 1, 2, 3]

10、統計字元出現的次數;

function fun (arr){
  var obj = {};
  for(let i= 0 ; i <arr.length;i++){
    if(obj.hasOwnProperty(arr[i])){
      obj[arr[i]]++;
    }else{
      obj[arr[i]] = 1;
    }
  }
  let cont = 0, num;
  for(let k in obj){
    if(obj[k] > cont){
       cont = obj[k];
       num = k 
    }
  }
  return cont  //  出現最多的次數
  return num // 出現最多的數字
  return obj // 統計所有字元出現的次數
}

fun('1223334444')

11、刪除數組出出現次數大於2的數組;

function fun (arr){
  var obj = {};
  for(let i= 0 ; i <arr.length;i++){
    if(obj.hasOwnProperty(arr[i])){
      obj[arr[i]]++;
    }else{
      obj[arr[i]] = 1;
    }
  }
  let newarr = [];
  for(let k in obj){
    if(obj[k] <= 2){
      newarr.push(obj[k])
    }
  }
  return newarr;
}
fun([1,2,2,3,3,3,4,4,4,4]) //   [1, 2]

 

    如果大家喜歡的話,歡迎關註“前端偽大叔”我將為您不間斷的分享前端學習知識!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JQ基礎——JQ的簡單使用 ...
  • vue.js解決開始代碼載入,以至於亂碼 vue.js通過幾行代碼可以解決這個問題 css: html: 使用後會等vue載入完再呈現效果,就不會出現,代碼在視圖裡了。 順帶介紹幾個基礎的vue api。 綁定css樣式: css: html: v bind:class="{done樣式:這是樣式中 ...
  • VUE從入門到放棄(第一天)——整體流程 先想想一個項目,vue項目是從什麼到什麼,然後再什麼的?那是什麼呢? 1. 搭建 ( vue cli) 2. 代碼內容 3. 運行 4. 封裝 5. 成品 一.搭建(腳手架vue cli) 首先node.js,npm,vue cli(腳手架)一定要有,這裡不 ...
  • 傻瓜式操作搭建個人網站 1.首先買功能變數名稱和雲伺服器 買東西一般都很方便的給錢就行。。。 百度,騰訊,阿裡都可以買,而且只要給錢,啥東西都給的明明白白。 這裡我就不細說了。個人推薦百度的。因為我就是用這個的。 2.後面來說下錢解決不了得事,配置雲伺服器,(買的功能變數名稱先放著不動它) 找到自己買的實例,打開V ...
  • # Vue指令大集合(無slot) #### 包含內容: 1. v-cloak2. v-html3. v-text4. v-bind5. v-show6. v-model7. v-for8. v-if v-else-if v-else9. v-pre 代碼如下:(可以自己複製去看一下) html 展 ...
  • .attr( ) 可以設置元素的屬性(也就是給元素新增加一個原來並不存在的屬性)也可以獲取元素的本來就有的屬性以及額外設置的屬性。如果要獲取的屬性沒有設置,那麼獲取到的結果是 undefined; .prop( )可以設置元素的屬性(HTML固有的屬性,可以給元素添加屬性)也可以獲取元素的固有的屬性 ...
  • 學習前端以來,一直很好奇像京東,淘寶這種大型網站的購物車是怎麼做到統一的,就去搜索了一些資料吧!大致的看了一下,自己實戰了下,俗話說的好,讀萬卷書不如行萬里路!購物車只是一個很小的案例,但也可以去動手做一做,感受下過程!積少成多! 這案例主要是通過本地儲存來實現的,我用了兩種方法,一種是cookie ...
  • jQuery -動畫 jQuery動畫分為三個部分,非自定義動畫,自定義動畫,和全局動畫設置。 一、非自定義動畫: 1.顯示、隱藏: show( ) 、hide( )、toggle() 兩種用法:1)不傳參數,代表直接顯示隱藏。 2) 向方法中傳遞一個參數,這個參數為number類型,代表動畫的執行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...