javascript增加Array的each方法 迴圈遍曆多維陣列

來源:互聯網
上載者:User

標籤:

 由於ECMA提供遍曆數組的方法forEach()只能遍曆一維數組,沒有提供迴圈遍曆多維陣列的方法,所以我們自己來實現一個each()方法,來遍曆多維陣列。

<script charset=utf-8 type=text/javascript>

 

/*var arr = [1,2,3,[4,[5]]];

arr.forEach(function(item,index,arr){

alert(item);

});

*/

//類比ECMA forEach  迴圈遍曆多維陣列

 

var arr = [1,2,3,[4,[5,[6,[7]]]]];

 

//使用原型,可以擴充項物件的屬性和方法

Array.prototype.each = function (fn){

try{

//計數器

this.i || (this.i=0);

//判斷數組的長度必須大於0 && 傳進來的必須是一個函數  才進行迴圈遍曆操作

if(this.length > 0 && fn.constructor == Function){

while(this.i < this.length){

//擷取數組的每一項

var e = this[this.i];

//如果取到了數組的每一項 && 該項仍為數組 則進行遞迴操作

if(e && e.constructor == Array){

e.each(fn);

}else{

//如果取到了數組的每一項 && 該項不為數組 則執行fn函數  列印出數組的每一項

fn.call(e,e);//不懂    (看下面講解或者見連結)             http://www.cnblogs.com/snandy/archive/2012/03/01/2373243.html

}

//使i遞增

this.i++;

}

//最後把i置為空白,記憶體回收機制 回收

this.i = null;

}

}catch(ex){

 

}

//返回當前對象

return this;

}

//forEach()方法 的參數是一個函數  並且函數內有參數,這裡我們就把函數內的參數設為一個

arr.each(function(item){

alert(item);

});

</script>

————————————————————分割線 call參數——————————————————————call和apply的第一個參數是null/undefined時函數內的的this指向window或global

call/apply用來改變函數的執行內容(this),它們的第一個參數thisArg是個對象,即作為函數內的this。

多數時候你傳啥函數內就是啥。僅以call樣本

1234567 function fun() {    alert(this);}fun.call(1);fun.call(‘a‘);fun.call(true);fun.call({name:‘jack‘});

 

分別彈出“1”、“a”、“true”、“[object Object]”。

有兩種情況需要注意,傳null或undefined時,將是JS執行環境的全域變數。瀏覽器中是window,其它環境(如node)則是global。

12 fun.call(null); // window or globalfun.call(undefined); // window or global

這在ECMAScript5.1 15.3.4.4中有解釋,如下

 

strict 模式下情況又有所不同,ES3比較寬容盡量去揣測代碼意圖。ES5strict 模式(ie6/7/8/9除外)則不再揣測,給call/apply傳入的任何參數不再轉換。如下

123456 ‘use strict‘function fun() {    alert(this);}fun.call(null)      // nullfun.call(undefined) // undefined

 

須注意!

javascript增加Array的each方法 迴圈遍曆多維陣列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.