<h1>
1.什么是稀疏數(shù)組
</h1>
在java衰琐,c++中數(shù)組是一段連續(xù)的存儲(chǔ)空間吗垮,元素與元素之間沒(méi)有空隙葫盼,但在js中允許存在有空隙的數(shù)組蛋勺,這就是稀疏數(shù)組(sparse array)瓦灶。稀疏數(shù)組就是包含從0開(kāi)始的不連續(xù)索引的數(shù)組。
<h1>
2.稀疏數(shù)組實(shí)例
</h1>
先看個(gè)例子
var arr = new Array(3);
arr[100]=1;
console.log(arr.length);
arr.forEach(function(x,i){
console.log(x);});
輸出為
101
1
這樣就創(chuàng)建了一個(gè)稀疏數(shù)組,遍歷它是js會(huì)跳過(guò)這些空隙抱完,但是當(dāng)我們輸出數(shù)組中空隙位置的值時(shí)
var arr = new Array(3);
arr[100]=1;
console.log(arr.length);
console.log(arr[0]);
arr.forEach(function(x,i){
console.log(x);});
輸出為
101
undefined
1
這里的undefined指不存在和在數(shù)組直接量中省略值是產(chǎn)生的undefined是不一樣的贼陶,后者是值為undefined
兩者的區(qū)別可以通過(guò)in操作符檢測(cè)
var a1=[,,]
var a2=new Array(3);
0 in a1;
0 in a2;
第一個(gè)判斷為true,因?yàn)閍1 為[undefined,undefined,undefined]
第二個(gè)判斷為false,因?yàn)?a2 在索引0初不存在元素
*需要注意的是在省略數(shù)組直接量時(shí)使用連續(xù)的逗號(hào)碉怔,如[1,,3]時(shí)得到的是稀疏數(shù)組
<h1>
3.壓縮稀疏數(shù)組
</h1>
js中的數(shù)組一般都是稀疏數(shù)組烘贴,通常來(lái)說(shuō)稀疏數(shù)組的遍歷較為困難,我們可以通過(guò)filter()方法壓縮其中的空隙撮胧,因?yàn)閒ilter會(huì)跳過(guò)空隙桨踪,返回密集的數(shù)組
sparse.filter(function(x){
return true;
});
*同樣可以使用filter()方法去除數(shù)組中的null和undefined
arr.filter(function(x){
return x!= undefined && x!= null;
});
<h1>
4.創(chuàng)建密集數(shù)組
</h1>
壓縮稀疏數(shù)組不如直接創(chuàng)建一個(gè)密集數(shù)組
var sparse = new Array(3);
var dense = Array.apply(null, Array(3));
sparse.forEach(function(x,i){
console.log('sparse :'+i+x);});
dense.forEach(function(x,i){
console.log('dense :'+i+x);});
數(shù)組dense為密集數(shù)組,這段代碼輸出為
dense: 0 undefined
dense: 1 undefined
dense: 2 undefined
<h1>
5.想法
</h1>
作為java起手的程序員芹啥,習(xí)慣了連續(xù)的數(shù)組锻离,也習(xí)慣將js中的數(shù)組轉(zhuǎn)化為密集數(shù)組使用,避免一些麻煩墓怀。但實(shí)際上js中沒(méi)有類似java中的數(shù)組汽纠,因?yàn)閖s中的數(shù)組根本就沒(méi)有索引,js中的“索引”其實(shí)不是數(shù)字是字符串傀履,因?yàn)閖s的對(duì)象就是字符串到任意值的鍵值對(duì)虱朵,數(shù)組作為一種對(duì)象數(shù)據(jù)類型自然不例外。