2013-08-19 53 views
2

我有一些javascript for {}循環,我重複使用在整個項目中,他們都與此類似:涅槃爲{}循環

for (var i = 0; i < things.length; i++) { 
    console.log(things[i]); 
    // This may be different in different areas of the project 
} 

我精縮的代碼,但環佔用了大量的的縮小代碼。有沒有一種方法,以縮短上面的代碼是這樣的:

loop { 
    console.log(things[i]); 
    // This may be different in different areas of the project 
} 

可能不是上面,但你的想法。 任何幫助,將不勝感激:)

+1

這是不可能修改語言本身,而是你可以考慮使用迭代器:['的forEach()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript /參考/ Global_Objects /陣列/的forEach)。 –

回答

3

一個jQuery-ish的方式來做到這一點:

function each(arr, func) { 
    for (var i = 0; i < arr.length; ++i) { 
    func(arr[i]); 
    } 
} 

可以這樣調用:

each(things, function(thing) { console.log(thing); }); 

each(things, function(thing) { console.log(thing); alert(thing); }); 

+0

或者你知道...'每次(的東西,執行console.log)' –

+1

真,只要你只是調用一個預定義的函數即可。 –

+0

這看起來不錯 – aNewStart847

4

如果重複打印不同的陣列,你可以做一個功能它削減你重複了下來:

function printArray(arr) { 
    for (var i = 0; i < arr.length; i++) { 
     console.log(arr[i]); 
    } 
} 

然後調用,如:

printArray(things); 

如果你正在做的不僅僅是印刷更多,希望它成爲更普遍的,你應該使用一個回調,像這樣:

function loopArr(arr, cb) { 
    for (var i = 0; i < arr.length; i++) { 
     cb(arr[i]); 
    } 
} 

,這可以被稱爲像:

loopArr(thing, function (i) { 
    console.log(i); 
}); 

Fiddle


還有一些,如果你使用的是已經可以爲你做這個,比如工具(或希望使用)jQuery,你可以使用jQuery.each()

+0

優秀的建議。 –

+0

的事情是,'的console.log()'的部分是在項目的不同區域不同。我要補充的是,對不起 – aNewStart847

+0

我會建議得到了'length'財產的價值和使用,而不是重新訪問與每個迭代的特性。 – Justin

1

你必須在項目和回調傳遞,但當然這是可能的。

function loop (item, callback) { 
    for (var i = 0; i < item.length; i++) { 
     callback(item[i]); 
    } 
} 

用途:

loop(things, function (item) { 
    console.log('do things here with each ' + item); 
}); 

還要注意的是,在更現代的瀏覽器,你可以簡單地做:

things.forEach(function (item) { 
    /* do whatever */ 
}); 
0

每個人都打我吧,但這裏是另一種方式來寫

function forEach(collection, callback){ 
    var e; 

    for (var i = 0; e = collection[i++];) { 
     callback(e); 
    } 
} 

其使用方法:

var a = ["The", "Brown", "Cow"]; 

forEach(a, function(e) { console.log(e); }); 

應該提到的是,有大量的迭代器函數的實現。你的確切情況是我需要改進這些。

+0

爲什麼這個downvoted? – Justin

1
function forEach(array, func) { 
    var i = array.length; 
    while(i--) { 
     func(array[i]); 
    } 
}