JavaScript連載21-合併數組、數組中的sort函數實現原理

1、數組遍歷和其餘

1.合併數組

  • 數組.concat(數組1,數組2,數組3,...)
  • 能夠用來合併多個數組
    //合併多個數組concat
    var arr = ["zhangsan","lisi","wangwu"];
    var arr1 = ["zhaoli","liqi"];
    var arr2 = ["xiaoliao"];
    var newArr = arr.concat(arr1);//合併了兩個數組
    console.log(newArr)
 

運行結果 21.1html

2.查找元素索引

  • indexOf(searchElement,position)和lastIndexOf(searchElement,position)
  • searchElement是要找的元素(變量),position就是從數組的哪裏開始找,返回的是第一個找到的索引;
  • 注意第二個函數是從後往前找到的第一個元素索引
    //indexOf()和lastIndexOf()
    var n1 = 3;
    var arr3 = [5,3,5,77,4,5,6,8];
    console.log(arr3.indexOf(5, 0));
    console.log(arr3.lastIndexOf(5, 5));
 

顯示結果 21.2git

3.foreach

  • 使用一個特殊的格式
    //forEach遍歷
    var arr4 = ["zhangsan","lisi","wangwu"];
    arr4.forEach(function (value,index,array) {
        console.log(value);
        console.log(index);
        console.log(array);
    })

顯示結果 21.3github

2、數組排序

1.sort函數

  • 排序是按照字符編碼來進行排序的,若是想要按照其餘標準進行排序,那麼須要提供比較函數,該函數比較兩個值,而後返回一個用於說明這兩個值的相對順序的數字,比較函數具備兩個參數a和b,其返回以下:
類型 結果
a<b a出如今b以前,返回一個小於0的值
a=b 返回0
a>b a出如今b以後,返回一個大於0的值
   //sort函數
    var arr5 = ["Tim","Andy","John","Kobe","James"];
    console.log(arr5.sort());
    var arr6 = [10,4,8,6,7,100];
    console.log(arr6.sort());//能夠看出即便是數字也會按照編碼規則進行排序,而不是按照數字大小來進行排序
    function sortNumber(a,b) {
        return a-b;//
    }
    console.log(arr6.sort(sortNumber));//把這個比較函數傳入就能夠改寫sort的排序邏輯


** 運行結果 ** 21.4數組

2.使用冒泡排序來實現sort函數

  • 知識點:用函數做爲參數傳入
    /**
     * sort的內部實現
     * @param {Array}array
     * @param {Function}fnCompare
     */
    function sort(array,fnCompare){
        //這個排序方法是冒泡排序,而且是先排大的值。
        for(var i=0;i<array.length-1;i++){//能夠看出數組的長度函數和Java同樣
            //標記是否完成了排序
            var sortFlag = true;
            //控制比較次數
            for(var j=0;j<array.length-1-i;j++){
                if(fnCompare(array[j],array[j+1])>0){//若是沒有>0的話,那就會出現永真的情況
                    sortFlag = false;
                    //交換位置
                    var temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
            //判斷
            if (sortFlag){
                break;
            }
        }
    }
    var arr7 = [10,20,5,1000,50];
    sort(arr7,sortNumber);
    console.log(arr7);
 

顯示結果 21.5微信

3、源碼:

  • D21_1_TraverseArray.html
  • 地址:https://github.com/ruigege66/JavaScript/blob/master/D21_1_TraverseArray.html
  • 博客園:https://www.cnblogs.com/ruigege0000/
  • 歡迎關注微信公衆號:傅里葉變換,我的帳號,僅用於技術交流,後臺回覆「禮包」獲取Java大數據學習視頻禮包
  • 20.4
相關文章
相關標籤/搜索