向一个数组中插入元素是平时很常见的一件事情。你可以使用push在数组尾部插入元素,可以用unshift在数组头部插入元素,也可以用splice在数组中间插入元素。

但是这些已知的方法,并不意味着没有更加高效的方法。让我们接着往下看……

向数组结尾添加元素

向数组结尾添加元素用push()很简单,但下面有一个更高效的方法

var arr = [1,2,3,4,5];
var arr2 = []; arr.push(6);
arr[arr.length] = 6;
arr2 = arr.concat([6]);

两种方法都是修改原始数组。不信?看看jsperf
手机上的效率

Android (v4.2.2)
arr.push(6); and arr[arr.length] = 6; 性能相同 // 3 319 694 ops/sec
arr2 = arr.concat([6]); 比其他两个方法慢50.61%
Chrome Mobile (v33.0.0)
arr[arr.length] = 6; // 6 125 975 ops/sec
arr.push(6); 慢66.74%
arr2 = arr.concat([6]); 慢87.63%
Safari Mobile (v9)
arr[arr.length] = 6; // 7 452 898 ops/sec
arr.push(6); 慢40.19%
arr2 = arr.concat([6]); 慢49.78% ``
最快的为
1. arr[arr.length] = 6; // 平均 5 632 856 ops/sec
2. arr.push(6); // 慢35.64%
3. arr2 = arr.concat([6]); // 慢62.67%
```

桌面上的效率

Chrome (v48.0.2564)
arr[arr.length] = 6; // 21 602 722 ops/sec
arr.push(6); 慢61.94%
arr2 = arr.concat([6]); 慢87.45%
Firefox (v44)
arr.push(6); // 56 032 805 ops/sec
arr[arr.length] = 6; 慢0.52%
arr2 = arr.concat([6]); 慢87.36%
IE (v11)
arr[arr.length] = 6; // 67 197 046 ops/sec
arr.push(6); 慢39.61%
arr2 = arr.concat([6]); 慢93.41%
Opera (v35.0.2066.68)
arr[arr.length] = 6; // 30 775 071 ops/sec
arr.push(6); 慢71.60%
arr2 = arr.concat([6]); 慢83.70%
Safari (v9.0.3)
arr.push(6); // 42 670 978 ops/sec
arr[arr.length] = 6; 慢0.80%
arr2 = arr.concat([6]); 慢76.07%

最快的为

1. arr[arr.length] = 6; // 平均42 345 449 ops/sec
2. arr.push(6); // 慢34.66%
3. arr2 = arr.concat([6]); // 慢85.79%

向数组的头部添加元素

现在我们试着

向数组的头部添加元素

var arr = [1,2,3,4,5];

arr.unshift(0);

[0].concat(arr);

这里有一些小区别,unshift操作的是原始数组,concat返回一个新数组,参考jsperf

手机上的效率 :

Android (v4.2.2)
[0].concat(arr); // 1 808 717 ops/sec
arr.unshift(0); 慢97.85%
Chrome Mobile (v33.0.0)
[0].concat(arr); // 1 269 498 ops/sec
arr.unshift(0); 慢99.86%
Safari Mobile (v9)
arr.unshift(0); // 3 250 184 ops/sec
[0].concat(arr); 慢33.67%

最快的为

1. [0].concat(arr); // 平均4 972 622 ops/sec
2. arr.unshift(0); // 慢64.70%

桌面上的效率

Chrome (v48.0.2564)
[0].concat(arr); // 2 656 685 ops/sec
arr.unshift(0); 慢96.77%
Firefox (v44)
[0].concat(arr); // 8 039 759 ops/sec
arr.unshift(0); 慢99.72%
IE (v11)
[0].concat(arr); // 3 604 226 ops/sec
arr.unshift(0); 慢98.31%
Opera (v35.0.2066.68)
[0].concat(arr); // 4 102 128 ops/sec
arr.unshift(0); 慢97.44%
Safari (v9.0.3)
arr.unshift(0); // 12 356 477 ops/sec
[0].concat(arr); 慢15.17%

最快的为

1. [0].concat(arr); // 平均6 032 573 ops/sec
2. arr.unshift(0); // 慢78.65%

向数组中间添加元素

使用splice可以简单的向数组中间添加元素,这也是最高效的方法。

var items = ['one', 'two', 'three', 'four'];
items.splice(items.length / 2, 0, 'hello');

我在许多浏览器和系统中进行了测试,结果都是相似的。希望这条小知识可以帮到你,也欢迎大家自行测试。

转载:http://www.cnblogs.com/rubylouvre/p/5751564.html

js向一个数组中插入元素的几个方法-性能比较的更多相关文章

  1. 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果

    package com.rui.test; import java.util.Random; /** * @author poseidon * @version 1.0 * @date:2015年10 ...

  2. PHP从数组中删除元素的四种方法实例

    PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...

  3. PHP数组中插入元素

    1. array_unshift()数组头插入新元素 $fruits = array('apple','pear','banana','orange'); array_unshift($fruits, ...

  4. Js中去除数组中重复元素的6种方法

    方法一: Array.prototype.method1 = function(){ var arr=[]; //定义一个临时数组 for(var i = 0; i < this.length; ...

  5. JS判断一个数组中是否有重复值的三种方法

    方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...

  6. 遍历数组中的元素(含es6方法)

    假如有这样一个数组.arr = [12,34,45,46,36,58,36,59],现在要遍历该数组. 方法1:以前我们可能会这样做: for(var i=0;i<arr.length;i++) ...

  7. JS判断一个数组中有无重复元素(数字)

    前段时间遇到了这个问题 也百度了很多 不过还是用自己的方法解决了 一个超级简单的方法 简单到令人发指 由于直接写文本太丑了 所以还是截图吧 嘻嘻嘻 假如有一个这样的数组 (这是假如  可能每个人的数据 ...

  8. JS 清除字符串数组中,重复元素

    <script language="JavaScript"> <!-- var arrData=new Array(); for(var i=0; i<10 ...

  9. js 关联着数组中追加元素

    var arr_data = new Array(); for ( var i in data.data ){ arr_data.push(arr_data[i] = data.data[ i ] ) ...

随机推荐

  1. dataTable表头未对其解决方法

    本文为博主原创,未经允许不得转载: 在tab页中使用dataTable时,默认显示的dataTable表头与数据显示正常,另一个的datatable则表头与数据未对其. 检查元素发现,datatabl ...

  2. 【译】第11节---数据注解-TimeStamp

    原文:http://www.entityframeworktutorial.net/code-first/TimeStamp-dataannotations-attribute-in-code-fir ...

  3. HDU 5726 GCD(RMQ+二分)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5726 题意:给出一串数字,现在有多次询问,每次询问输出(l,r)范围内所有数的gcd值,并且输出有多 ...

  4. _event_stop

    EventId 事件ID TeamId 事件玩家分组,攻守(防守为1,进攻为2),自定义阵营(_faction表自定义阵营ID),公会(公会guid) StopType 结束事件需要满足的条件,枚举类 ...

  5. socket之基础

    链接https://www.cnblogs.com/clschao/articles/9593164.html

  6. Tp3.2 复合查询

    我们常常有这样的需求,比如搜索. 搜索出,标题,子标题,内容中包含某某关键字. 这就要and,or结合使用了. $where = ['is_show'=>1,'status'=>1]; / ...

  7. Windows下Oracle创建数据库的3种方式

    1.   Creating a Database with DBCA DatabaseConfiguration Assistant (DBCA) is the preferred way to cr ...

  8. PostegreSQL模板数据库

    模板数据库 模板数据库就是创建新database时,PostgreSQL会基于模板数据库制作一份副本,其中会包含所有的数据库设置和数据文件. CREATE DATABASE 实际上是通过拷贝一个现有的 ...

  9. Discrete Log Algorithms :Baby-step giant-step

    离散对数的求解 1.暴力 2.Baby-step giant-step 3.Pollard’s ρ algorithm …… 下面搬运一下Baby-step giant-step 的做法 这是在 ht ...

  10. 学习笔记8—MATLAB中奇异值处理办法

    一.Inf 和 NAN处理 lnf: 无穷大值,可以用islnf或者isfinite函数处理 NAN:不是一个数字,可以用isnan函数来处理 或者:  类似于这种处理 mn(find(mn<= ...