JavaScript的數組(一)

來源:互聯網
上載者:User

標籤:join   它的   [1]   組元   根據   pre   defs   積累   ever   

在JavaScript中,對象,數組,函數是最最常用的東東了,寫完了對象和函數,最後來說說數組吧,提到數組,就只能想到,map,forEach啊,pop,push啊,當真是沒有一點點的積累了?這麼多年程式媛當真是就只學會了for迴圈了,人生如此美妙,你卻如此淺薄無知啊,可惜啊可惜!如果你當真認為是這樣,你就是個笨蛋啦。廢話不多說,乾貨走起!

首先,說下數組元素可以是任意類型的,索引是從零開始的,數組可能是稀疏的,即數組元素的索引不一定是要連續的哦,中間可以有空缺的呦。那麼數組的length針對於稀疏數組,length大於所有元素個數的和。
數組呢,是對象的特殊形式,所以它的索引實際上和碰巧是整數的屬性名稱差不多。但是,用數字索引來訪問數組元素一般來說要比訪問常規的對象屬性要快很多。

數群組繼承自Array.prototype中的屬性。
1,建立數組
這裡說一種不常見的建立方式

var undefs = [,,]undefinedundefs(2) [empty × 2]
 var a = new Array(); var b = new Array(10); var c = new Array(1,2,3,4,‘thank you‘)

javascipt將指定的數字索引值轉換成字串----索引值1變成“1”,然後將其作為屬性名稱來使用
var o = {};
o[1] = "one";

數組的特殊之處在於,根據需要更新他們的length屬性值。
注意:可以使用負數或非整數來索引數組。事實上數組索引僅僅是對象屬性名稱的一種特殊類型。
2,稀疏數組,length
即包含從0開始的不連續索引的數組。

var a = new Array(5); a[1000] = 0;0a(1001) [empty × 1000, 0]

length一個特殊之處在於,看下面的例子:

 var a = [1,2,3,4,5]; a.length = 3;3a(3) [1, 2, 3]a.length = 00a[]a.length = 55a(5) [empty × 5]

3:數組的添加和刪除

arr.push(‘one‘,‘two‘);//尾部插入

arr.unshift() //首部插入

delete a[1]   //刪除操作不影響數組原來的長度,刪除後原數組變成了稀疏數組。
pop()//尾部刪除一個元素
shift()//頭部刪除一個元素

splice()  是一個通用的插入,刪除,替換運算元組的方法。

4數組的遍曆

常用for迴圈,不能用for/in迴圈去檢測數組,因為for/in迴圈能夠枚舉繼承的屬性名稱,如添加到Array.prototype中的方法。除非用額外的檢測方法來過濾不想要的屬性。

5.數組的方法:

join(),reverse(),sort(),concat(),slice(),splice()
toString()
新的數組方法來遍曆,映射,過濾,檢測,簡化和搜尋數組。
every()和some()不總是訪問每一個數組元素,如果有fasle就會儘早終止遍曆。

 var a = [2,12,3,5,6]; a.forEach(function(v,i,a){a[i] = v+1}) a.map(function(x){return x*x}); a.filter(function(x){return x<3})   //返回的數組元素是調用的數組的一個子集。 a.every(function(x){return x<10}) //所有的值都<10 a.some(function(x){return x<10})   //存在有小於10的數就是true 

重點來說說不常用的reduce函數:

var sum = a.reduce(function(x,y){return x+y},0);需要兩個參數,first one is 一個函數,任務就是用某種方法把兩個值化簡為一個值,並返回簡化後的值,第二個參數是傳遞給函數的初始值。在例子中,第一次調用化簡函數時的參數是0和2,相加後返回2,第二次調用時參數是2和12,返回14,每次都是將上一次計算傳回值和數組下一個進行計算。最後reduce()返回這個值。當不指定初始值調用reduce()時,它將數組的第一個元素作為其初始值。上面的求和例子就可以省略初始值的設定。空數組調用reduce函數會報錯!!!reduceRight()的工作原理類似reduce(),不同之處在於:是按照數組的索引從高到低(從由到左)處理數組的。例如計算:2^(3^4);就是從右至左進行計算求值的。
var a = [2,3,4]; var result = a.reduceRight(function(x,y){     return Math.pow(y,x); })

 這裡的union函數自己寫的,運行下貌似沒問題,可以合并對象屬性:

 var objects = [{x:1},{y:2},{z:3}]; function union(x,y){      for(var i in y){          i in x ? null : x[i] = y[i];      }      return x; } var merged = objects.reduce(union);

最後一個方法:indexOf()和lastIndexOf(),裡面傳值都是要檢索的欄位,沒有就返回-1,有就返回索引,一個從前往後尋找,一個從後往前尋找。沒啥說的。本篇結束!!!

 

JavaScript的數組(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.