登录  /  注册
首页 > web前端 > js教程 > 正文

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

迷茫
发布: 2017-03-26 15:10:37
原创
1003人浏览过

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时,使用快速排序

以上就是深入了解javascript数组重排序方法的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号