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 相关文章推荐
jquery 检测元素是否存在的实例代码
Nov 19 Javascript
JavaScript创建一个object对象并操作对象属性的用法
Mar 23 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
Apr 06 Javascript
遍历json 对象的属性并且动态添加属性的实现
Dec 02 Javascript
angularjs实现天气预报功能
Jun 16 Javascript
Angular 开发学习之Angular CLI的安装使用
Dec 31 Javascript
vue单页面在微信下只能分享落地页的解决方案
Apr 15 Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 Javascript
angularjs请求数据的方法示例
Aug 06 Javascript
Vue的状态管理vuex使用方法详解
Feb 05 Javascript
关于ES6尾调用优化的使用
Sep 11 Javascript
原生JS实现弹幕效果的简单操作指南
Nov 10 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函数的方法
2013/11/13 PHP
dedecms中使用php语句指南
2014/11/13 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Python字符串内置函数功能与用法总结
2019/04/16 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
Python threading的使用方法解析
2019/08/28 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
sklearn的predict_proba使用说明
2020/06/28 Python
Python 串口通信的实现
2020/09/29 Python
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
小学老师寄语大全
2014/04/04 职场文书
培训科主任岗位职责
2014/08/08 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
房产公证书样本
2015/01/23 职场文书
医生个人年度总结
2015/02/28 职场文书