js的 算法 和 數據結構


js的 算法

1、對一個對象數組按照對象某個屬性進行排序  : https://www.cnblogs.com/webcabana/p/7460038.html

  在做公交的項目中就碰到過這種算法問題,從后台請求回來的一大堆的數據,都需要前端處理。所以就把這個問題寫進博客里。

   只要是 js的sort()方法 的使用:https://www.cnblogs.com/fnz0/p/7680297.html

     sort()方法 的執行過程

   (個人分析) sort()函數的 比較函數,在執行時,js程序會依次把 數組的項,兩個兩個的傳遞給比較函數的形參。

  根據比較函數的返回值 是否大於0,再決定傳遞進來的這兩項是否要對換位置。

        arr.sort(function(a,b){
            return a-b;   // return的值為 正或0,則數組中a、b對應的實參 不調換位置。
        });               // return的值為 負,則數組中a、b對應的實參 調換位置。

   通過測試,發現數組arr中的取某兩個項的組合,並沒有全部都進入了比較函數中(這個內部是怎么實現的,我們可以不用深究),

  但是最后的結果就是按照順序return中要求的比較的規則進行排序了。

      var arr = [4,3,8,2,6];
      console.log("起始",arr);
      arr.sort(function(a,b){
          console.log(a,b);  // 這里輸出的並沒有把arr所有的組合全部都執行了一遍比較函數,內部肯定通過某種方式實現了最少次的比較,得到數值所有項按照順序排列。 return a-b;     // 這里內部具體是通過什么機制實現的最少次比較的,可以不用太過深究
      });
      //  4 3
      //  4 8
      //  8 2
      //  4 2
      //  3 2
      //  8 6
      //  4 6

2、冒泡排序(將數值按照大小順序進行排列): https://www.cnblogs.com/dushao/p/6004883.html

3、數組中的最小值和最大值:https://www.cnblogs.com/zhouyangla/p/8482010.html  或  https://www.cnblogs.com/ywx354980-bk/p/8718541.html

  a、排序法:     

  b、js中Math 對象的 min 和 max 方法 :

     min 和 max 方法的參數都是數值,而不是數組。所以要利用min和max方法必須要把數組的值一個一個取出來作為參數。

     apply方法 的第二個參數是數組,傳遞到 劫持(繼承)對象方法的參數, 是數組中的值一個一個傳遞過去(而不是一個對象)。即 apply數組參數 --> 繼承對象方法的arguments。而對象的參數是 arguments[ i ]

   注:不過es6中有一個  展開運算符(...),可以將數值或對象兩邊的 [] 或 {} 去掉的功能。所以min 和 max可以通過 展開運算符 直接實現。

  

 

 

4、數組中所有的值 與 一個已知值的 的差值的最小值:

    

個人體會:算法基本 和 數組有關,所以數組有關的API要熟練。

總結:一般在js中涉及到的算法就  排序算法、二分查找、動態規划(最好避免使用遞歸的算法,效率太低了,容易引起瀏覽器假死狀態)


別人的關於js算法的博客:

1、JS常見的算法 : https://www.cnblogs.com/lvmylife/p/7208541.html

 

 

 

 

js的 數據結構

重點:個人理解,數據結構就是儲存數據的結構(如:數組、對象。這里只考慮原生的數據結構,不考慮基本類型的數據結構) https://www.cnblogs.com/zai1/p/11216368.html

1、數組:省略

2、對象: js 對象的屬性名是包括空字符串在內的所有字符串,所以對象的屬性名可以是中文。

   調用對象的方式,兩種: 第二種 方式中,屬性名是可以動態設置。

    stooge.first_name 、

    stooge[“first_name”]

3、集合(set):https://www.runoob.com/w3cnote/es6-map-set.html     類似於數組的儲存,放在一個集合里

let mySet = new Set();
 
mySet.add(1); // Set(1) {1}
mySet.add(5); // Set(2) {1, 5}
mySet.add(5); // Set(2) {1, 5} 這里體現了值的唯一性
mySet.add("some text"); 
// Set(3) {1, 5, "some text"} 這里體現了類型的多樣性

4、映射(Map):https://www.runoob.com/w3cnote/es6-map-set.html    (Map 對象保存鍵值對

      Map對象和數組有什么區別呢? https://blog.csdn.net/chenna1102cn/article/details/74931966  或 https://www.jb51.net/article/135685.htm

   Map 和 數組(二維數組) 可以互相轉化。https://blog.csdn.net/z9061/article/details/83413015

      map 與 原生對象區別 :https://www.cnblogs.com/mengfangui/p/9934849.html

var myMap = new Map();
var key = "a string"; 
 
myMap.set(key, "和鍵'a string'關聯的值"); // 這里的key可以是任意數據類型
 
myMap.get(key);    // "和鍵'a string'關聯的值"
myMap.get("a string");   // "和鍵'a string'關聯的值"
                         // 因為 key === 'a string'

 


 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM