JavaScript之稀疏数组和密集数组

4,090 阅读2分钟
原文链接: github.com

一、JavaScript稀疏数组

首先,我们来说一下什么是JavaScript稀疏数组,我们知道定义一个数组的时候可以使用对象实例:

var arr=new Array(3);

上面创建方法我们只是声明了有三个元素的数组,这个时候它的length=3,但是我们并没有给每个项赋值,这个时候for循环每个项,输出的结果都是undefined:

for(var i=0;i<arr.length;i++)
{
  cosole.log(arr[i]);//undefined
}

这个大家都比较了解,下面我们给其中几个项赋值:

arr[0]=1;
arr[2]=2;

大家注意这里我并没有给arr[1]赋值,这个时候arr[1]=undefined;

而这种的数组我们就称作为稀疏数组,也就是数组的元素如果不是连续有值,我们就称作为稀疏数组。

说白了js中建立稀疏数组非常easy,仅仅要你有益让数组元素之间存在间隙就可以。如

var arr = []; 
arr[0] = 0;
arr[200] = 200;

二、密集数组

什么是密集数组呢?在java和C语言中,数组是一片连续的存储空间,有着固定的长度。增加数组事实上位置是address。长度为n。那么占用的存储空间是address[0],address[1],address[2].......address[n-1]。即数组元素之间是紧密相连的,不存在空隙。例如以下的js代码创建的就是一个密集数组

var data = [3,1,6,9,2];


// 密集数组
 var dense = Array.apply(null, Array(3)); 
 dense[2] = "name";
 for(var a in dense) 
 {
    console.log("index=" + a + ",value=" + dense[a]);
 }

三、区别

//稀疏数组
 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]);
 }

能够看到确实是有区别的:稀疏数组仅仅遍历了一次(由于仅仅有一个元素),密集数组遍历了3次。