Rumah > hujung hadapan web > tutorial js > 深入了解javascript数组重排序方法

深入了解javascript数组重排序方法

迷茫
Lepaskan: 2017-03-26 15:10:37
asal
1300 orang telah melayarinya

javascript数组的原生重排序方法

1.数组 reverse 方法

    (1)作用

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

    (2)语法

arr.reverse()   //没有参数
Salin selepas log masuk

(3)例子

let myArray =  [ 'one', 'two', 'three' ]; 

myArray.reverse();

console.log(myArray); //  ["three", "two", "one"]
Salin selepas log masuk

(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]
Salin selepas log masuk

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

2.数组 sort 方法

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

(2)语法

arr.sort();
arr.sort(compareFunction);
Salin selepas log masuk

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

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

     arr.sort() //没有添加参数
Salin selepas log masuk

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;
        };
      }
Salin selepas log masuk

(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}
Salin selepas log masuk

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;
        }
  };
Salin selepas log masuk

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

Atas ialah kandungan terperinci 深入了解javascript数组重排序方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan