本文实例讲述了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观察控制台输出结果是:
可以看到确实是有差别的:稀疏数组只遍历了一次(因为只有一个元素),密集数组遍历了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排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# javascript
# 稀疏数组
# sparse
# array
# 密集数组
# JavaScript稀疏数组示例教程
# JavaScript中利用Array filter() 方法压缩稀疏数组
# JavaScript中的稀疏数组与密集数组[译]
# JavaScript稀疏数组与孔hole示例详解
# 遍历
# 可以看到
# 都是
# 是个
# 也会
# 相关内容
# 是有
# 很容易
# 没有什么
# 感兴趣
# 数据结构
# 就把
# 不像
# 给大家
# 只要你
# 不存在
# 只有一个
# 很奇怪
# 说白了
# 更多关于
相关文章:
如何通过主机屋免费建站教程十分钟搭建网站?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站之星好吗?新手能否轻松上手建站?
如何打造高效商业网站?建站目的决定转化率
如何在阿里云高效完成企业建站全流程?
长沙企业网站制作哪家好,长沙水业集团官方网站?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
中山网站制作网页,中山新生登记系统登记流程?
如何高效配置香港服务器实现快速建站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何选择香港主机高效搭建外贸独立站?
如何在搬瓦工VPS快速搭建网站?
如何用狗爹虚拟主机快速搭建网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
nginx修改上传文件大小限制的方法
广平建站公司哪家专业可靠?如何选择?
无锡营销型网站制作公司,无锡网选车牌流程?
广州营销型建站服务商推荐:技术优势与SEO优化解析
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何通过虚拟主机空间快速建站?
大连 网站制作,大连天途有线官网?
建站之星如何保障用户数据免受黑客入侵?
如何高效生成建站之星成品网站源码?
C#如何在一个XML文件中查找并替换文本内容
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何在宝塔面板中创建新站点?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
如何快速搭建高效简练网站?
如何快速生成高效建站系统源代码?
如何在阿里云域名上完成建站全流程?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何通过WDCP绑定主域名及创建子域名站点?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
香港服务器建站指南:免备案优势与SEO优化技巧全解析
c# await 一个已经完成的Task会发生什么
建站之星logo尺寸如何设置最合适?
家庭建站与云服务器建站,如何选择更优?
如何在建站之星绑定自定义域名?
如何彻底删除建站之星生成的Banner?
建站上市公司网站建设方案与SEO优化服务定制指南
广州商城建站系统开发成本与周期如何控制?
建站之星安装后如何自定义网站颜色与字体?
网站制作模板下载什么软件,ppt模板免费下载网站?
Swift开发中switch语句值绑定模式
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
小建面朝正北,A点实际方位是否存在偏差?
深圳网站制作案例,网页的相关名词有哪些?
如何用VPS主机快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。