使用jQuery,我应该如何编写forEach样式循环函数,在每次交互时,变量名的实际数量增加(并且仍然有效!)?
据我所知,这可以通过“eval”完成,但显然是不好的做法,因为它会减慢一切 - 特别是在循环中。
什么是替代方法?即结果基本上是:
var1 =((var1a)* foo)+ var1b;
var2 =((var2a)* foo)+ var2b;
var3 =((var3a)* foo)+ var3b;
var4 =((var4a)* foo)+ var4b;
答案 0 :(得分:0)
使用ECMA脚本括号表示法来访问对象中的属性或方法。
var foo = {
meth1: function() {},
meth2: function() {},
meth3: function() {}
};
Object.keys( foo ).forEach(function( name ) {
foo[ name ]();
});
答案 1 :(得分: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);
答案 2 :(得分: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;
});