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 相关文章推荐
取选中的radio的值
Jan 11 Javascript
一段批量给页面上的控件赋值js
Jun 19 Javascript
原创javascript小游戏实现代码
Aug 19 Javascript
js简单实现用户注册信息的校验代码
Nov 15 Javascript
JS获取元素多层嵌套思路详解
May 16 Javascript
javascript实现简单的on事件绑定
Aug 23 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
Oct 10 Javascript
javascript iframe跨域详解
Oct 26 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
jQuery zTree插件快速实现目录树
Aug 16 jQuery
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
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
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
js DOM模型操作
2009/12/28 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
js实现表格字段排序
2014/02/19 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
简单介绍python封装的基本知识
2019/08/10 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
深入了解Python 变量作用域
2020/07/24 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
学校三八妇女节活动情况总结
2014/03/09 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
检讨书大全
2015/01/27 职场文书
化工生产实习心得体会
2016/01/22 职场文书
python使用torch随机初始化参数
2022/03/22 Python