全网整合营销服务商

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

免费咨询热线: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示例详解  # 遍历  # 可以看到  # 都是  # 是个  # 也会  # 相关内容  # 是有  # 很容易  # 没有什么  # 感兴趣  # 数据结构  # 就把  # 不像  # 给大家  # 只要你  # 不存在  # 只有一个  # 很奇怪  # 说白了  # 更多关于 


相关文章: 如何快速完成中国万网建站详细流程?  如何选择美橙互联多站合一建站方案?  ,购物网站怎么盈利呢?  建站之星客服服务时间及联系方式如何?  广州营销型建站服务商推荐:技术优势与SEO优化解析  Android使用GridView实现日历的简单功能  学校为何禁止电信移动建设网站?  三星网站视频制作教程下载,三星w23网页如何全屏?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何快速查询域名建站关键信息?  如何在阿里云服务器自主搭建网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何配置WinSCP新建站点的密钥验证步骤?  招商网站制作流程,网站招商广告语?  上海网站制作开发公司,上海买房比较好的网站有哪些?  如何通过可视化优化提升建站效果?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何在宝塔面板中修改默认建站目录?  如何用IIS7快速搭建并优化网站站点?  如何通过VPS建站实现广告与增值服务盈利?  如何彻底删除建站之星生成的Banner?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  建站主机类型有哪些?如何正确选型  建站VPS能否同时实现高效与安全翻墙?  如何在阿里云ECS服务器部署织梦CMS网站?  建站之星如何保障用户数据免受黑客入侵?  建站之星后台管理系统如何操作?  七夕网站制作视频,七夕大促活动怎么报名?  音响网站制作视频教程,隆霸音响官方网站?    如何选择CMS系统实现快速建站与SEO优化?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  建站主机选购指南:核心配置与性价比推荐解析  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  已有域名和空间,如何快速搭建网站?  如何通过老薛主机一键快速建站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  微信推文制作网站有哪些,怎么做微信推文,急?  建站之星导航配置指南:自助建站与SEO优化全解析  网站制作服务平台,有什么网站可以发布本地服务信息?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  济南企业网站制作公司,济南社保单位网上缴费步骤?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  如何在阿里云域名上完成建站全流程?  Python如何创建带属性的XML节点  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  制作网站的过程怎么写,用凡科建站如何制作自己的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。