javascript
Array的javascript数据结构描述
寫在前面的話:
經(jīng)常看到技術(shù)博客上寫的內(nèi)容很詳細,對于一個問題,大家的博客內(nèi)容似乎都是一樣的。不難發(fā)現(xiàn)這些技術(shù)博客已經(jīng)成為各路教程的匯總地,而教程一般都是參考國外博客翻譯或者直接在經(jīng)典的書籍上大片抄錄。我不推薦在segementfault或者其他博客上找教程學(xué)習(xí)編程,因為這樣得來的東西是碎片化的,往往也摻雜著作者個人對于程序的理解,很容易誤導(dǎo)人,所以學(xué)習(xí)最好的方法是自己買上一本圣經(jīng)認真看透,再來博客論壇看看別人的學(xué)習(xí)心得,然后對比自己的理解,這樣收獲才會很大。所以今天關(guān)于這個javascript數(shù)組的總結(jié)認識,我寫的不是教程,而是根據(jù)經(jīng)典書籍參考學(xué)習(xí)后得到的一些感悟。想要完整學(xué)習(xí),請務(wù)必看下列參考書籍
數(shù)據(jù)結(jié)構(gòu)與算法JavaScript描述 p13~p32
javascript高級程序設(shè)計(第三版) p84~p98
先來舉個數(shù)組栗子
tracy=[{1:"pomelo"},"tracy","2"]; //數(shù)組可以保存任何類型的數(shù)組,如字符串,對象,數(shù)值都可以 typeof(tracy) //"object"數(shù)組是一個對象,對象是一個引用類型, Array.isArray(tracy); //”true“ ,這個是ECMAScript5定義的一個方法, tracy[0][1] //"pomelo",取出0號數(shù)組下屬性名為“1”的值。用 tracy[0].1// VM1687:2 Uncaught SyntaxError: Unexpected numbermessage: //因為對象屬性值只能是字符串類型,所以直接用”點表示法“會報錯,但是“[]表示法”可以 tracy=[{pomelo:"tracy"},"tracy","2"]; tracy[0].pomelo //"tracy"。把數(shù)組0的對象屬性名變成字符串就可以直接取值了 tracy.length//3 tracy[tracy.length]="imooc"; //"imooc", javascript中l(wèi)ength是可讀寫的,因為數(shù)組能夠?qū)嵕€末尾添加刪除操作 tracy//[Object, "tracy", "2", "imooc"] var tracyStr=tracy.toString(); //"undefined" toString()方法,將數(shù)組轉(zhuǎn)化為字符串 tracyStr //"[object Object],tracy,2,imooc" tracy.join(";"); //"[object Object];tracy;2;imooc" //join()方法只接受一個參數(shù)用于數(shù)組轉(zhuǎn)化為字符串后的分隔符。 //toString()方法只是默認用“,”逗號分割。
以上就是一個簡單的數(shù)組的栗子,我們可能在平時中也高頻使用。總結(jié)一下:
1.數(shù)組可以保存任何類型的數(shù)組,如字符串,對象,數(shù)值都可以
2.javascript中l(wèi)ength是可讀寫的
3.JavaScript 對象中的屬性名必須是字符串。
數(shù)組的標準定義是什么?
數(shù)組是:一個存儲元素的線性集合(collection)---(一段線性分配的內(nèi)存),元素可以通過索引來任意存取,索引通常是數(shù)字,用來計算元素之間存儲位置的偏移量。幾乎所有的編程語言都有類
似的數(shù)據(jù)結(jié)構(gòu)。
然而JavaScript 的數(shù)組卻略有不同。
1.javascript沒有定義中說的那樣的數(shù)據(jù)結(jié)構(gòu),作為替代。javascript提供類數(shù)組對象(array-like),把下標變成字符串,用其作為屬性,所以這就是它慢的原因
2.JavaScript 中的數(shù)組是一種特殊的對象,用來表示偏移量的索引是該對象的屬性,索引可
能是整數(shù)。使用起來方便:屬性的檢索操作像操作對象屬性一樣
3.數(shù)組可以由 Array 對象的構(gòu)造函數(shù)創(chuàng)建,也可以用內(nèi)置的方法
怎么創(chuàng)建數(shù)組?
對象的創(chuàng)建:
var pomelo={};//對象字面量表達法 或者 var pomelo=new Object();//Object構(gòu)造函數(shù)的方法數(shù)組的創(chuàng)建:
var pomelo=[];//數(shù)組字面量表達法 或者 var pomelo=new Array();//使用array構(gòu)造函數(shù)的方法(可以省略new)Q:那么數(shù)組字面量表達法創(chuàng)建與構(gòu)造函數(shù)創(chuàng)建有什么不同呢?
A:大多數(shù) JavaScript 專家推薦使用 []操作符,和使用 Array 的構(gòu)造函數(shù)相比,這種方式被認為效率更高.
什么時候使用數(shù)組?
因為我們知道數(shù)組是一種對象,那么我們應(yīng)該什么時候用數(shù)組?什么時候用對象呢?
其實有一個很簡單的規(guī)則就是:當(dāng)屬性名是連續(xù)的整數(shù)時就使用數(shù)組,否則就使用對象.
數(shù)組有那些原生的方法呢?
concat() 連接兩個或更多的數(shù)組,并返回結(jié)果。
join() 把數(shù)組的所有元素放入一個字符串。元素通過指定的分隔符進行分隔。
pop() 刪除并返回數(shù)組的最后一個元素
push() 向數(shù)組的末尾添加一個或更多元素,并返回新的長度。
reverse() 顛倒數(shù)組中元素的順序。
shift() 刪除并返回數(shù)組的第一個元素
slice()從某個已有的數(shù)組返回選定的元素
sort() 對數(shù)組的元素進行排序
split() 方法用于把一個字符串分割成字符串?dāng)?shù)組。和join()方法相反
splice()刪除元素,并向數(shù)組添加新元素。
toSource() 返回該對象的源代碼。
toString() 把數(shù)組轉(zhuǎn)換為字符串,并返回結(jié)果。
toLocaleString() 把數(shù)組轉(zhuǎn)換為本地數(shù)組,并返回結(jié)果。
unshift() 向數(shù)組的開頭添加一個或更多元素,并返回新的長度。
valueOf() 返回數(shù)組對象的原始值
這些原生方法的使用我就不一一介紹了,大家自己去查API
javascript怎么去描述這些方法的數(shù)據(jù)結(jié)構(gòu)和算法呢?
1.為了方便鏈式調(diào)用,我們可以給Array原型添加自定義的方法來擴充數(shù)組功能
Function.prototype.method=function(name,func){this.prototype[name]=func;return this;};2.利用可讀寫的length可以完成數(shù)組添加,刪除操作
比如 push() 向數(shù)組的末尾添加元素var poemlo=["1","2","3"]; pomelo.push("4");//["1","2","3","4"] // pomelo[pomelo.length]="4";//["1","2","3","4"]比如 pop()函數(shù)Array.method("pop_pomelo",function(){return this.splice(this.length-1,1); }) pomelo.pop();// “4” //pomelo.pomelo_pop() //["4"]3.利用for in 可以完成數(shù)組的循環(huán)遍歷的功能
//比如forEach()方法使得每個數(shù)組元素有乘方的效果var pomelo=["1","2","3"];function square(num){console.log(num+": "+num*num);}pomelo.forEach(square);//可以添加數(shù)組功能squareArray.method("square",function(){for (var i=0;i<this.length;i++){console.log(i+" "+this[i]*this[i]);} })pomelo.square();//得到的效果與forEach()是一樣的4.普通的數(shù)組直接賦值是淺賦值,會改變原有的數(shù)組對象,我們可以自己寫一個copy數(shù)組函數(shù)
Array.method("copy_pomelo",function(){var arr= [];for (var i=0;i<this.length;i++){arr[i]=this[i];}/*console.log(arr);console.log(this);*/arr.length=this.length;return arr;})var new_pomelo=pomelo.copy_pomelo();//new_pomelo的數(shù)組值和pomelo一樣,但是是獨立的數(shù)組區(qū)分splice()和slice()函數(shù),split()函數(shù)
slice() 從某個已有的數(shù)組返回選定的元素 slice(start,end) ===取出來的數(shù)組是slice[start]--slice[end] (但是不包含slice[end]) splice() 刪除元素,并向數(shù)組添加新元素。 splice(start,deletecount,item) ===數(shù)組從splice[start]開始,移除deletecount個元素,并用新的item數(shù)組元素代替 split()函數(shù)是把一個`字符串`分割成字符串`數(shù)組`。和join()方法恰好相反。 "2:3:4:5".split(":") //將返回["2", "3", "4", "5"]先寫到這兒.持續(xù)更新==.
總結(jié)
以上是生活随笔為你收集整理的Array的javascript数据结构描述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JFinal model简单包装,版本2
- 下一篇: GIT 技巧