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 相关文章推荐
ExtJS GTGrid 简单用户管理
Jul 01 Javascript
javascript控制swfObject应用介绍
Nov 29 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
解决js下referer兼容各大浏览器的方法
Nov 03 Javascript
使用Plupload实现直接上传附件至七牛云存储
Dec 26 Javascript
jQuery模仿单选按钮选中效果
Jun 24 Javascript
微信小程序实战之自定义模态弹窗(8)
Apr 18 Javascript
js实现rem自动匹配计算font-size的示例
Nov 18 Javascript
详解Angular5 服务端渲染实战
Jan 04 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
jQuery实现的五星点评功能【案例】
Feb 18 jQuery
浅谈小程序 setData学问多
Feb 20 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
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
Python实现简单状态框架的方法
2015/03/19 Python
Python smallseg分词用法实例分析
2015/05/28 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Python处理PDF与CDF实例
2020/02/26 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
医学生求职自荐信
2013/10/25 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏