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