2011-11-27 55 views
0

使用jQuery,我應該如何編寫forEach樣式循環函數,在每個迭代中變量名稱的實際數量增加(並且仍然有效!)?通過使用jQuery進行循環編寫工作迭代變量/ javascript

據我所知,這可以用「eval」來完成,但顯然是不好的做法,因爲它減慢了一切 - 特別是在循環中。

什麼是替代方法?即結果本質上是:

var1 =((var1a)* foo)+ var1b;

var2 =((var2a)* foo)+ var2b;

var3 =((var3a)* foo)+ var3b;

var4 =((var4a)* foo)+ var4b;

+0

我們確實需要更多關於你的函數/數據的信息。你現在的問題非常模糊(我不知道你在底部列出的「結果」是什麼)。添加'eval'版本會非常有幫助。 – brianreavis

+0

你想咖喱嗎? –

+0

嗨,我不認爲目前的答案是真的覆蓋它。我應該重新提交嗎?關鍵問題是,對於我來說,我如何運行一個迭代變量作爲變量仍然有效的每個循環,即使它們已經通過循環構建 - 具有迭代數字。這是基本的語法:「變量[i ++] =((var [i ++] a)* foo)+ var [i ++] b;」 ??我很想提供一個工作示例,但我不知道如何構建一個示例。 – Grazlewacky

回答

0

使用ECMA腳本括號表示法來訪問對象中的屬性或方法。

var foo = { 
    meth1: function() {}, 
    meth2: function() {}, 
    meth3: function() {} 
}; 

Object.keys(foo).forEach(function(name) { 
    foo[ name ](); 
}); 
0

您對此錯誤的看法。你不應該依賴函數的名字來告訴你結果。你應該將參數傳遞給一個爲你處理的函數。

你反而會做的事:

function doStuff(data, foo) { ... } 

result = 0; 
result += doStuff(someData1, operation); 
result += doStuff(someData2, operation); 

你也可以與像startingPoint附加參數擴展doStuff如果你需要結果來操作它的值傳遞。

function doStuff(data, foo, startingPoint) { ... } 

result = 0; 
result += doStuff(someData1, operation, result); 
result += doStuff(someData2, operation, result); 
0

我不完全知道你爲什麼會想這樣做,而不是創建一個正常功能,並通過功能編號它:

var data = {{data1a,data1b,data1c},{data2a,data2b,data2c}}; 
function myFunction(functionNumber){ 
    return data[functionNumber][0] * foo + data[functionNumber[1]; //functionNumber is 0 based 
} 

但假設您的實際情況做了一下比你的例子更有意義,可能類似於:

var functions = {}; 
var data ={}; //adjust for data source like {dataA = data1A, dataB=data1B}; 
var i = 1; 
$.each(data, function(key, value){ 
    functions[i++] = ((key) * foo) + value; 
});