Array的javascript數據結構描述

寫在前面的話:

常常看到技術博客上寫的內容很詳細,對於一個問題,你們的博客內容彷佛都是同樣的。不難發現這些技術博客已經成爲各路教程的彙總地,而教程通常都是參考國外博客翻譯或者直接在經典的書籍上大片抄錄。我不推薦在segementfault或者其餘博客上找教程學習編程,由於這樣得來的東西是碎片化的,每每也摻雜着做者我的對於程序的理解,很容易誤導人,因此學習最好的方法是本身買上一本聖經認真看透,再來博客論壇看看別人的學習心得,而後對比本身的理解,這樣收穫纔會很大。因此今天關於這個javascript數組的總結認識,我寫的不是教程,而是根據經典書籍參考學習後獲得的一些感悟。想要完整學習,請務必看下列參考書籍javascript

數據結構與算法JavaScript描述 p13~p32java

javascript高級程序設計(第三版) p84~p98算法

先來舉個數組栗子

clipboard.png

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);
    //能夠添加數組功能square
         Array.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同樣,可是是獨立的數組
  1. 區分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"]

先寫到這兒.持續更新==.

相關文章
相關標籤/搜索