通常我們會用迴圈的方式來遍歷陣列。但是迴圈是 導致js 效能問題的原因之一。一般我們會採用下幾種方式來進行陣列的遍歷:
方式1:
for in迴圈:
var arr = [1,2,3,4,5];
var obj = ;
for( var item in arr|obj );
這裡的 item:
方式2:
for 迴圈:
for (var i=0; i//do sth with arr[i];
這兩種方法應該非常常見且使用很頻繁。但實際上,這兩種方法都存在效能問題。
在方式一中,for-in 需要分析出array 的每個屬性,這個操作效能開銷很大。用在 key 已知的陣列上是非常不划算的。所以盡量不要用 for-in,除非你不清楚要處理哪些屬性,例如 json 物件這樣的情況。
在方式2中,迴圈每進行一次,就要檢查一下陣列長度。讀取屬性(陣列長度)要比讀區域性變數慢,尤其是當 array 裡存放的都是 dom 元素,因為每次讀取都會掃瞄一遍頁面上的選擇器相關元素,速度會大大降低。
所以這時候我們就有必要對方式2進行優化。
加速的 :
var arr = [1,2,3,4,5];
var length =arr.length;
for(var i=0; ifn(arr[i]);
現在只需要讀取一次 array 的 length 屬性,速度已經加快了。但是還能不能更快呢?
事實是,如果迴圈終止條件不進行比較運算,那麼迴圈的速度還可以更快。
加速且優雅的:
var arr = [1,2,3,4,5];
var i = arr.length;
while(i--){
fn(arr[i]);
方式 3:
foreach:
var arr = [1,2,3,4,5];
arr.foreach(
fn(value,index){
//do sth with value ;
注意:關於跳出迴圈的幾種方式:
js陣列遍歷和物件遍歷
1.普通for迴圈var arr 1,2,3,4,5,6 for var i 0 i length i 2.優化版for迴圈 使用變數,將長度快取起來,避免重複獲取長度,陣列很大時優化效果明顯for var j 0 len arr.length j j 3.foreach,es5推出的,陣列自帶的迴...
js陣列遍歷和物件遍歷
針對js各種遍歷作乙個總結分析,從型別用處 分陣列遍歷和物件遍歷 還有效能,優缺點等。1,普通for迴圈,經常用的陣列遍歷 var arr 1,2,0,3,9 for var i 0 i 2,優化版for迴圈 使用變數,將長度快取起來,避免重複獲取長度,陣列很大時優化效果明顯 for var j 0...
js陣列遍歷和物件遍歷
針對js各種遍歷作乙個總結分析,從型別用處 分陣列遍歷和物件遍歷 還有效能,優缺點等。js陣列遍歷 1,普通for迴圈,經常用的陣列遍歷 var arr 1,2,0,3,9 for var i 0 i 2,優化版for迴圈 使用變數,將長度快取起來,避免重複獲取長度,陣列很大時優化效果明顯 for ...