zoukankan      html  css  js  c++  java
  • javascript 数组重排序方法

    星期四, 23. 三月 2017 09:43下午

    javascript数组的原生重排序方法

    1.数组 reverse 方法

        (1)作用

            颠倒数组中元素的位置 (改变原来的数组)

        (2)语法

    arr.reverse()   //没有参数
    

        (3)例子

    let myArray =  [ 'one', 'two', 'three' ]; 
    
    myArray.reverse();
    
    console.log(myArray); //  ["three", "two", "one"]
    

        (4)返回值
            原数组的引用,不会新生成数组

    let myArray =  [ 'one', 'two', 'three' ]; 
    
    let result = myArray.reverse();
    
    result[2] = 2;
    
    console.log(myArray);   //["three", "two", 2]
    
    console.log(result);    //["three", "two", 2]
    

        (5)缺点
             不太灵活,只能颠倒数组

    2.数组 sort 方法

        (1)作用
             sort() 会在适当的位置对数组的元素进行排序 (原数组会改变)

        (2)语法

    arr.sort();
    arr.sort(compareFunction);
    

        (3)参数
            可选。用来制定按某中顺序进行排序的函数。

            如果省略参数 例如 这样调用。

         arr.sort() //没有添加参数
    

             sort() 函数会应用下面的参数,所以默认比较的是 Unicode 码

        //关于sort 的可选参数
        //如果没有设置参数,v8 中会自动生成一个参数
          if (!IS_CALLABLE(comparefn)) {
          	   //这是默认的参数值
    	    comparefn = function (x, y) {
    	      if (x === y) return 0;
    	      if (%_IsSmi(x) && %_IsSmi(y)) {
    			return %SmiLexicographicCompare(x, y);
    	      }
    	      //在这里 会把参数全都转换为 Unicode 在进行比较
    	      x = TO_STRING(x);
    	      y = TO_STRING(y);
    	      if (x == y) return 0;
    	      else return x < y ? -1 : 1;
    	    };
    	  }
    

        (4)原理
             1.先设置参数,自己输入或者使用默认值

             2.如果元素的个数小于2,直接返回

             3.判断当前的对象是否是数组, 如果对象不是数组,会把原型链上的值复制到当前的数组,进行排序

    	var arry =  [1,2,3,4,2,5];
    	var a = {};
    	a.__proto__ =  arry;
    	a.sort() //  Array {0: 1, 1: 2, 2: 2, 3: 3, 4: 4, 5: 4}
    

             4.把数组里面的undefined值都排在最后,

             5.排序数组中所有不为undefind的值

             6. 当 数组中元素的个数小于等于10的时,使用 InsertionSort 排序

     //comparefn  是sort 的参数
     //参数可以自己传入 ,或者使用v8 默认的值
      function InsertionSort(a, from, to) {
    	    for (var i = from + 1; i < to; i++) {
    		      var element = a[i];
    		      for (var j = i - 1; j >= from; j--) {
    				var tmp = a[j];
    				var order = comparefn(tmp, element);
    				if (order > 0) {
    				  a[j + 1] = tmp;
    				} else {
    				  break;
    				}
    		      }
    		      a[j + 1] = element;
    	    }
      };
    

             7.当 数组中元素的个数大于10时,使用快速排序

  • 相关阅读:
    C语言 · 猜算式
    C语言 · 2n皇后问题
    数据结构 · 二叉树遍历
    C语言 · 滑动解锁
    出现Exception in thread "main" java.lang.UnsupportedClassVersionError: org/broadinstitute/gatk/engine/CommandLineGATK : Unsupported major.minor version 52.0问题解决方案
    linux提取指定列字符并打印所有内容(awk)
    mapping生成sam文件时出现[mem_sam_pe] paired reads have different names错误
    出现“java.lang.AssertionError: SAM dictionaries are not the same”报错
    Linux运行Java出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错
    Linux:echo中,>和>>的区别(保存结果和追加结果)
  • 原文地址:https://www.cnblogs.com/kuachengshiyongbao/p/6607437.html
Copyright © 2011-2022 走看看