1. 程式人生 > >day 08 排序 ES5新增陣列方法 內建物件

day 08 排序 ES5新增陣列方法 內建物件

 

1.選擇排序

var arr = [43,543,23,1,6];

    function box(arr){

        var temp = 0;

        for (var i = 0; i < arr.length-1; i++) {

            for(var j=i+1; j<arr.length; j++){

                if(arr[i] > arr[j]){

                    temp = arr[i];

                    arr[i] = arr[j];

                    arr[j] = temp;

                }

            }

        }

        return arr;

    }

    alert(box(arr));

2.sort排序

    a.按照ASCII碼值排序

         var arr = ["a",4,"*",3,"$"];//有特殊字元的元素也會根據ASCII碼值排序。

         var arr = [3,4,15,3,17];//在比較一個數兩位數時,先比較第一位數,再比較第二位數,

                                                 結果為arr=[15,17,3,3,4]

    b.arr.sort(function(){})

        一個函式裡,用另一個函式作為引數傳遞,另一個函式叫回調函式。

        sort(function(a,b){

            //return a-b;//從小到大排序,改變了原來的排序方式(就是不再是按ASCII碼值進行排序了)。

            return b-a;從大到小排序

        })

    c.隨機排序(先了解怎麼用就行)

    例子:

   var arr = [53,54,3,24,12];

    

    for (var i = 0; i < 10; i++) {

        arr.sort(function(a,b){

            return Math.random()-0.5;

        })

        console.log(arr);

    }

    d.底層實現原理。(瞭解)

3.ES5新增陣列方法

    1)forEach(function(item,index,array){});

        a.傳遞一個回撥函式

        b.這個回撥函式沒有返回值

        c.回撥函式的引數

            item:每個元素的值

            index:元素的下標

            array:每次遍歷的陣列。(這個一般不用,可以不寫)

         例子

      1)arr.forEach(function(item,index,array){

           console.log(item,index,array);

           });

       2)作用forEach計算陣列所有元素的和

         var sum = 0;

        arr.forEach(function(item,index,array){

        sum += item;

        });

        alert(sum);

  

2) indexOf();

        arr.indexOf(值)

        定義:檢測一某個元素在陣列中是否存在,如果存在返回這個元素的下標,如果不存在返-1

        a.如果有兩個引數arr.indexOf(值,index)(index可以為負數,表示從陣列後面開始數,從哪裡開始找)

            從index開始往右查詢這個值的下標;如果存在返回這個元素的下標,如果不存在返-1

        b.如果一個數組中有兩個相同的值,按這種方式arr.indexOf(值);返回的是第一次出現這個數的下標

    3)map();

        這是一個對映的函式

        方法傳遞一個回撥函式,回撥函式傳遞三個引數,引數與forEach一樣。

        通過某個條件改變原陣列的值,改變後的值 會組成一個新的陣列返回。

        例子:

        var arr = [54,65,434,23,4];

        var newArr = arr.map(function(item,index,array){

        return item-5;

        })

         alert(newArr);

    4)filter(function(item,index,array){});

        這是一個過濾函式

        方法傳遞一個回撥函式,回撥函式傳遞三個引數,引數與forEach一樣。

        最終返回一個過濾後的陣列

        過濾:通過某個條件,獲得符合這個條件的陣列元素,組成一個新陣列後返回。

        例子:

        var arr = [43,43,23,6,45,34];

        var newArr = arr.filter(function(item,index,array){

        return item<10;

        })

        alert(newArr);

    5)reduce(); 歸併方法   從陣列下標為1的位置開始迴圈

        例子:      prev     next

        var arr = [53,       54,     3,24,12];

         var sum = arr.reduce(function(prev,next){//pre 開始有個預設值,這裡的預設值是53.表示上一次操 作返回的結果

                                                                            //next 表示 下一個數

            document.write("return的結果是:"+prev+",迴圈輸出的是:"+next+"<br>")

          return prev+next;

        });

       alert(sum)

4.instanceof();(關鍵字)

     用來檢測某種引用資料型別的資料是屬於哪個物件。

    不能用來檢測基本資料型別。

例子:

    function box(){

           

     }

     alert(box instanceof Function);//true

  var str="ll";(基本資料型別)

  alert(str instanceof String);//false

5.擴充套件(瞭解)

    精確檢測某種資料屬性哪個物件。

    var type = Object.prototype.toString;

    console.log(type.call("fke"));

    console.log(type.call(5));

    console.log(type.call(null));

    console.log(type.call(undefined));

    console.log(type.call(NaN));

    console.log(type.call([]));

    console.log(type.call(true));

    console.log(type.call({}));

    console.log(type.call(function(){}));

6.內建物件

     window,String,Math,Number,Array,正則,Date

 

7.String  凡是物件,就會有屬性或方法

1)String的屬性:

                    (1)length:獲取字串的字元個數(只讀) 

                    (2) 可以通過下標獲取字串的某個字元,但是不能修改

                             比如:str[2]:這種方式可以獲取不能修改

2)String的方法:

                     (1)str.charAt(index);    //獲取str字串中index下標位置的字元

                     (2)str.charCodeAt(index);//獲取str字串中index下標位置的字元的ASCII碼值。

                     (3)String.fromCharCodeAt(ASCII碼值);//通過傳遞ASCII碼值獲取對應的字元。

                     

                     (4)str.indexOf("字元",);//與陣列方法一樣

                     (5)str.lastIndexOf("字元",index);//和indexOf()相反,第二個引數不識別負數。

                              從後往前找到一個出現的字元,index不能為負數,但是是從前數,再往前找

 

                      (6)str.substr(index,num);//擷取字串,num:擷取num個字元,沒有num引數,擷取到最後。

                      (7)str.substring(index);//擷取字串,從index位置到最後

                               str.substring(index,i);//擷取字串,從index位置到i位置的字元,但不包含第i個。  

                      (8)str.replace("str中的字元","被替換的字元");//替換,只能替換查到的第一個字串      

                      (9)str.split("字串中的某個字元");把一個字串轉成陣列。

                        

                      (10)toLowerCase();//把字串轉變為小寫

                      (11)toUpperCase();//把字串轉變為大寫

      第一個字串變大寫

                      var str = "fljewkjfelkw";

                      str = str.charAt(0).toUpperCase() + str.substr(1);

                      alert(str);