源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-12-25 18:18 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要: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

[b]1、创建稀疏数组[/b] 如下代码创建了一个固定长度的稀疏数组
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;

[b]2、创建密集数组[/b] 可以看到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观察控制台输出结果是: [img]http://files.jb51.net/file_images/article/201612/20161228102729101.png?20161128102845[/img] 可以看到确实是有差别的:稀疏数组只遍历了一次(因为只有一个元素),密集数组遍历了3次。 [b]3、总结[/b] JavaScript中的数组并不像我们在C或java等语言中遇到的常规数组,在js中数组并不是起始地址+长度构成的一片连续的地址空间。 javascript中数组其实就是个对象,只不过会自动管理一些"数字"属性和length属性罢了。 说的更直接一点,JavaScript中的数组根本没有索引,因为索引应该是数字,而JavaScript中数组的索引其实是字符串。 arr[1]其实就是arr["1"],给arr["1000"] = 1,arr.length也会自动变为1001。 这些表现的根本原因就是:JavaScript中的对象就是字符串到任意值的键值对。 虽然稀疏数组和密集数组差别不大,javascript也没有语法强制数组是稀疏的还是密集的,这不过是概念上的区分。 [b]最佳实践是:就把js数组当成是java或C中的数组,由我们程序员来负责让js的数组元素是连续的。[/b]
var array = [1,2,3,4];
如:
var array = new Array();array[0]=0;array[1]=1;
这样创建的js数组,就符合我们熟悉的数组了。 更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《[url=http://www.1sucai.cn/Special/278.htm]JavaScript数组操作技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/148.htm]JavaScript排序算法总结[/url]》、《[url=http://www.1sucai.cn/Special/281.htm]JavaScript遍历算法与技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/119.htm]JavaScript数学运算用法总结[/url]》、《[url=http://www.1sucai.cn/Special/297.htm]JavaScript数据结构与算法技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/472.htm]JavaScript查找算法技巧总结[/url]》及《[url=http://www.1sucai.cn/Special/439.htm]JavaScript错误与调试技巧总结[/url]》 希望本文所述对大家JavaScript程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部