javascript对数组的常用操作代码 数组方法总汇


Posted in Javascript onJanuary 27, 2011

1. shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.shift(); //a:[2,3,4,5] b:1
2. unshift:将参数添加到原数组开头,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
注:在IE6.0下测试返回值总为undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。
3. pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.pop(); //a:[1,2,3,4] b:5
4. push:将参数添加到原数组末尾,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7
5. concat:返回一个新数组,是将参数添加到原数组中构成的
var a = [1,2,3,4,5];
var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]
6. splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...
var a = [1,2,3,4,5];
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
var b = a.splice(0,1); //同shift
a.splice(0,0,-2,-1); var b = a.length; //同unshift
var b = a.splice(a.length-1,1); //同pop
a.splice(a.length,0,6,7); var b = a.length; //同push
7. reverse:将数组反序
var a = [1,2,3,4,5];
var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]
8. sort(orderfunction):按指定的参数对数组进行排序
var a = [1,2,3,4,5];
var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]
9. slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
var a = [1,2,3,4,5];
var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]
10. join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
var a = [1,2,3,4,5];
var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"
数组是JavaScript提供的一个内部对象,它是一个标准的集合,我们可以添加(push)、删除(shift)里面元素,我们还可以通过for循环遍历里面的元素,那么除了数组我们在JavaScript里还可以有别的集合吗?

由于JavaScript的语言特性,我们可以向通用对象动态添加和删除属性。所以Object也可以看成是JS的一种特殊的集合。下面比较一下Array和Object的特性:

Array:
新建:var ary = new Array(); 或 var ary = [];
增加:ary.push(value);
删除:delete ary[n];
遍历:for ( var i=0 ; i < ary.length ; ++i ) ary[i];

Object:
新建:var obj = new Object(); 或 var obj = {};
增加:obj[key] = value; (key为string)
删除:delete obj[key];
遍历:for ( var key in obj ) obj[key];

从上面的比较可以看出Object完全可以作为一个集合来使用,在使用Popup窗口创建无限级Web页菜单(3)中我介绍过Eric实现的那个__MenuCache__,它也就是一个模拟的集合对象。

如果我们要在Array中检索出一个指定的值,我们需要遍历整个数组:
代码:

var keyword = ; 
for ( var i=0 ; i < ary.length ; ++i ) 

{ 

if ( ary[i] == keyword ) 

{ 

// todo 

} 

}

而我们在Object中检索一个指定的key的条目,只需要是要使用:
代码:

var key = ''; 
var value = obj[key]; 

// todo

 Object的这个特性可以用来高效的检索Unique的字符串集合,遍历Array的时间复杂度是O(n),而遍历Object的时间复杂度是O(1)。虽然对于10000次集合的for检索代价也就几十ms,可是如果是1000*1000次检索或更多,使用Object的优势一下就体现出来了。在此之前我做了一个mapping,把100个Unique的字符mapping到1000个字符串数组上,耗时25-30s!后来把for遍历改成了Object模拟的集合的成员引用,同样的数据量mapping,耗时仅1.7-2s!!!

对于集合的遍历效率(从高到低):var value = obj[key]; > for ( ; ; ) > for ( in )。效率最差的就是for( in )了,如果集合过大,尽量不要使用for ( in )遍历。

Javascript 相关文章推荐
S2SH整合JQuery+Ajax实现登录验证功能实现代码
Jan 30 Javascript
怎么判断js脚本加载完成
Feb 28 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
Feb 19 Javascript
JQuery的attr 与 val区别
Jun 12 Javascript
完美实现八种js焦点轮播图(上篇)
Jul 18 Javascript
Javascript中for循环语句的几种写法总结对比
Jan 23 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
Feb 14 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
详解如何使用webpack打包JS
Jun 21 Javascript
vue 使用html2canvas将DOM转化为图片的方法
Sep 11 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
Nov 05 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
JavaScript 注册事件代码
Jan 27 #Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
Jan 27 #Javascript
EXT窗口Window及对话框MessageBox
Jan 27 #Javascript
基于jquery的表头固定的若干方法
Jan 27 #Javascript
jquery animate图片模向滑动示例代码
Jan 26 #Javascript
jQuery 幻灯片插件(带缩略图功能)
Jan 24 #Javascript
jquery lazyload延迟加载技术的实现原理分析
Jan 24 #Javascript
You might like
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
php中AES加密解密的例子小结
2014/02/18 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
php数组键名技巧小结
2015/02/17 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
Vue 数据响应式相关总结
2021/01/28 Vue.js
python单线程实现多个定时器示例
2014/03/30 Python
pycharm 使用心得(三)Hello world!
2014/06/05 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
python和js交互调用的方法
2020/06/23 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
经贸日语毕业生自荐信
2013/11/03 职场文书
网上书店创业计划书
2014/01/12 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL