javascript稀疏數(shù)組(sparse array)

<h1>
1.什么是稀疏數(shù)組
</h1>
在java,c++中數(shù)組是一段連續(xù)的存儲空間,元素與元素之間沒有空隙,但在js中允許存在有空隙的數(shù)組,這就是稀疏數(shù)組(sparse array)。稀疏數(shù)組就是包含從0開始的不連續(xù)索引的數(shù)組。
<h1>
2.稀疏數(shù)組實例
</h1>
先看個例子

var arr = new Array(3);
arr[100]=1;
console.log(arr.length);
arr.forEach(function(x,i){
console.log(x);});

輸出為

101
1

這樣就創(chuàng)建了一個稀疏數(shù)組,遍歷它是js會跳過這些空隙,但是當我們輸出數(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ū)別可以通過in操作符檢測

var a1=[,,]
var a2=new Array(3);
0 in a1;
0 in a2;

第一個判斷為true,因為a1 為[undefined,undefined,undefined]
第二個判斷為false,因為 a2 在索引0初不存在元素

*需要注意的是在省略數(shù)組直接量時使用連續(xù)的逗號,如[1,,3]時得到的是稀疏數(shù)組
<h1>
3.壓縮稀疏數(shù)組
</h1>
js中的數(shù)組一般都是稀疏數(shù)組,通常來說稀疏數(shù)組的遍歷較為困難,我們可以通過filter()方法壓縮其中的空隙,因為filter會跳過空隙,返回密集的數(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)建一個密集數(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ù)的數(shù)組,也習慣將js中的數(shù)組轉(zhuǎn)化為密集數(shù)組使用,避免一些麻煩。但實際上js中沒有類似java中的數(shù)組,因為js中的數(shù)組根本就沒有索引,js中的“索引”其實不是數(shù)字是字符串,因為js的對象就是字符串到任意值的鍵值對,數(shù)組作為一種對象數(shù)據(jù)類型自然不例外。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 第七章:數(shù)組 2017.02.27 數(shù)組 數(shù)組是值的有序集合。每個值叫做一個元素,而每個元素在數(shù)組中有一個位置,以...
    靜候那一米陽光閱讀 490評論 0 1
  • 第三章 類型、值和變量 1、存取字符串、數(shù)字或布爾值的屬性時創(chuàng)建的臨時對象稱做包裝對象,它只是偶爾用來區(qū)分字符串值...
    坤少卡卡閱讀 720評論 0 1
  • 數(shù)組的基本特點 數(shù)組元素是任意類型的 可能的最大索引是2^32-2,默認起始索引是 0 Javascript的數(shù)組...
    dooze閱讀 546評論 0 1
  • 膽量,對于我來說是一件多么困難的事情。只敢去想象,不敢去實現(xiàn),更不敢大聲的表達出來 。所有的膽量我都把它...
    百合花任澤欣閱讀 641評論 0 0
  • 我每天熬夜做的各種事情忽然讓我覺得未來也不是一片黑暗,恍然大悟哦我的日子可以這樣過可以那樣過這種感覺真是好極了
    麻辣小龍俠x閱讀 160評論 0 0

友情鏈接更多精彩內(nèi)容