关于JS三种数组合并排序的简单方法的比较

目录

前言

想法

测试方法及代码

测试工具

测试代码

测试结果

FireFox 93.0

Edge 94.0.992.50

Chrome 83.0.4103.97

结论


前言

今日看到一个题目:两个有序数组,如何合并成一个有序数组?

想法

很简单的题目,今天简单地聊聊JavaScript中的三种快速实现:

  1. 使用concat合并后用sort排序;
  2. 创建大数组,逐个元素赋值;
  3. 创建空数组,逐个元素添加。

测试方法及代码

测试工具

        w3school TIY

测试代码

<!DOCTYPE html>
<html>
  <body>
    <h1>JavaScript 测试</h1>
    <p id="demo"></p>

    <script>
    var arrayLen = 50_0000
    var a = [];
    var b = [];
    for(var i=0;i<arrayLen;i++){
      a.push(i*5+1);
      b.push(i*5+2);
    }
    
    function test(){
      var s = "";
      var sd = new Date();
      {//1、使用concat合并后用sort排序
        var d = a.concat(b).sort((a,b)=>a-b);
      }
      s+=new Date()-sd;
      s+=" - ";
      var sd = new Date();
      {//2、创建大数组,逐个元素赋值
        var c=new Array(a.length+b.length);
        var i=0,j=0;
        while(i<a.length || j<b.length){
          c[i+j] = i==a.length?b[j++]:(j==b.length?a[i++]:(a[i]<b[j]?a[i++]:b[j++]));
        }
      }
      s+=new Date()-sd;
      s+=" - ";
      var sd = new Date();
      {//3、创建空数组,逐个元素添加
        var e=[];
        var i=0,j=0;
        while(i<a.length || j<b.length){
          e.push(i==a.length?b[j++]:(j==b.length?a[i++]:(a[i]<b[j]?a[i++]:b[j++])));
        }
      }
      s+=new Date()-sd;
      return s;
    }
    document.getElementById("demo").innerHTML += "arrayLen = "+arrayLen+"<br>";
    for(var i=0; i<10; i++) document.getElementById("demo").innerHTML += test()+"<br>";
    </script>
  </body>
</html>

测试结果

FireFox 93.0

Edge 94.0.992.50

Chrome 83.0.4103.97

结论

第一种方法写法最简单,对于数组元素少的情况,用起来还是很不错的,但是数组元素量大的时候就会影响效率了;

第二种和第三种方法在火狐浏览器中运行效率基本无差别,但第二种方法在Edge和Chrome浏览器中执行效率上明显高出第三种方法,所以在数据量大的时候推荐使用第二种方法;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值