javascript数组的原生重排序方法
(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)缺点
不太灵活,只能颠倒数组
(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时,使用快速排序
Atas ialah kandungan terperinci 深入了解javascript数组重排序方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!