javascript稀疏数组(sparse array)和密集数组用法分析


Posted in Javascript onDecember 28, 2016

本文实例讲述了javascript稀疏数组(sparse array)和密集数组用法。分享给大家供大家参考,具体如下:

学习underscore.js数组相关API的时候,遇到了sparse array这个东西,以前没有接触过。

这里学习下什么是稀疏数组和密集数组。

什么是密集数组呢?在Java和C语言中,数组是一片连续的存储空间,有着固定的长度。加入数组其实位置是address,长度为n,那么占用的存储空间是address[0],address[1],address[2].......address[n-1]。即数组元素之间是紧密相连的,不存在空隙。如下的js代码创建的就是一个密集数组

var data = [3,1,6,9,2];

什么是稀疏数组呢?与密集数组相反,javascript并不强制要求数组元素是紧密相连的,即允许间隙的存在。如下的js代码是合法的:

var sparse = new Array();
sparse[0] = 0;
sparse[3] = 3;
alert(sparse[0]);//输出0
alert(sparse[1]);//输出undefined

1、创建稀疏数组

如下代码创建了一个固定长度的稀疏数组

var a = new Array(3);
a[2] = 1;
alert(a[0]);//undefined
alert(a[2]);//1

说白了js中建立稀疏数组很容易,只要你故意让数组元素之间存在间隙即可。如

var arr = [];
arr[0] = 0;
arr[200] = 200;

2、创建密集数组

可以看到js中的数组一般都是稀疏的,一般来说稀疏数组的遍历比较麻烦。

var dense = Array.apply(null, Array(3));

这行代码等同于var  dense = Array(undefined, undefined, undefined) ;呵呵是不是觉得很奇怪,这种方式跟稀疏数组没有什么差别。看代码:

//稀疏数组
var array = new Array(3);
array[2] = "name";
for(var a in array)
{
  console.log("index=" + a + ",value=" + array[a]);
}
// 密集数组
var dense = Array.apply(null, Array(3));
dense[2] = "name";
for(var a in dense)
{
  console.log("index=" + a + ",value=" + dense[a]);
}

用F12观察控制台输出结果是:

javascript稀疏数组(sparse array)和密集数组用法分析

可以看到确实是有差别的:稀疏数组只遍历了一次(因为只有一个元素),密集数组遍历了3次。

3、总结

JavaScript中的数组并不像我们在C或java等语言中遇到的常规数组,在js中数组并不是起始地址+长度构成的一片连续的地址空间。

javascript中数组其实就是个对象,只不过会自动管理一些"数字"属性和length属性罢了。

说的更直接一点,JavaScript中的数组根本没有索引,因为索引应该是数字,而JavaScript中数组的索引其实是字符串。

arr[1]其实就是arr["1"],给arr["1000"] = 1,arr.length也会自动变为1001。

这些表现的根本原因就是:JavaScript中的对象就是字符串到任意值的键值对。

虽然稀疏数组和密集数组差别不大,javascript也没有语法强制数组是稀疏的还是密集的,这不过是概念上的区分。

最佳实践是:就把js数组当成是java或C中的数组,由我们程序员来负责让js的数组元素是连续的。

var array = [1,2,3,4];

如:

var array = new Array();array[0]=0;array[1]=1;

这样创建的js数组,就符合我们熟悉的数组了。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
很酷的javascript loading效果代码
Jun 18 Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
包含中国城市的javascript对象实例
Aug 03 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
有关文件上传 非ajax提交 得到后台数据问题
Oct 12 Javascript
微信小程序 SocketIO 实例讲解
Oct 13 Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 Javascript
AngularJS创建一个上传照片的指令实例代码
Feb 24 Javascript
jQuery实现ajax回调函数带入参数的方法示例
Jun 26 jQuery
create-react-app 修改为多入口编译的方法
Aug 01 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
Dec 09 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
Apr 24 Javascript
JS中闭包的经典用法小结(2则示例)
Dec 28 #Javascript
AngularJS实现网站换肤实例
Feb 19 #Javascript
详解js树形控件—zTree使用总结
Dec 28 #Javascript
js 轮播效果实例分享
Dec 28 #Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
Dec 28 #Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 #Javascript
Angular使用ng-messages与PHP进行表单数据验证
Dec 28 #Javascript
You might like
基于Zend的Captcha机制的应用
2013/05/02 PHP
PHP生成器简单实例
2015/05/13 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
php验证码生成器
2017/05/24 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
mouse_on_title.js
2006/08/25 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
python发布模块的步骤分享
2014/02/21 Python
python实现sublime3的less编译插件示例
2014/04/27 Python
Python使用MONGODB入门实例
2015/05/11 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Django用户身份验证完成示例代码
2020/04/03 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
python 基于wx实现音乐播放
2020/11/24 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
九年级政治教学反思
2014/02/06 职场文书
公司员工检讨书
2014/02/08 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
2014年中秋寄语
2014/08/11 职场文书
生物工程专业求职信
2014/09/03 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书