全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

本文实例讲述了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小时内与您取得联系。