在for循环中调用Function

时间:2012-04-03 09:43:16

标签: javascript jquery

我试图在FOR LOOP中调用一个函数。由于格式相同,除了传递的数据的名称。

renderCharts(data1, axis1, 'mainchart1');

我在做什么

var data1 = [12, 45, 30, 80];
var axis1 = ['15 Jan', '22 Jan', '29 Jan', '5 Feb'];

var data2 = [89, 45, 30, 80];
var axis2 = ['15 Jan', '22 Jan', '29 Jan', '5 Feb'];

for(var i = 1; i <= 2; i++){
    renderCharts("data"+i, "data"+i, "mainchart"+i)
}

某些原因导致它失效。

5 个答案:

答案 0 :(得分:2)

在第一个示例中,您传递了2个数据对象和一个字符串,但是在循环中传入的是3个字符串且没有数据对象,我相信在javascript中你需要使用eval或类似的东西,如果你想要为for循环的每次迭代传递一个名为data(n)的数据对象

答案 1 :(得分:2)

试试这个:

var data = [
             [12, 45, 30, 80],
             [89, 45, 30, 80]
           ];
var axis = [ 
             ['15 Jan', '22 Jan', '29 Jan', '5 Feb'],
             ['15 Jan', '22 Jan', '29 Jan', '5 Feb']
           ];

//for(var i = 1; i <= 2; i++){ <== array index starts with 0
for(var i=0;i<data.length;i++)
{
    renderCharts( data[i], axis[i], "mainchart"+i)
}

您实际上并没有将两个不同的变量 - 组合传递给函数,而是传递具有各自名称的字符串。所以你的函数实际上并没有得到它需要的数据,只是变量名。

要么将数据转换为上面的数组,要么使用其他答案的方法,通过window[]对象引用变量。

为清楚起见,阵列方法应该是首选。

答案 2 :(得分:2)

你传递的是字符串,而不是变量。如果您希望该功能正常工作,请将函数调用更改为:

renderCharts(window['data'+i],window['axis'+i],'mainchart'+i);
如果变量未在全局范围内声明,则

或替换窗口

答案 3 :(得分:1)

您将字符串传递给函数,而不是您想要的变量。

答案 4 :(得分:1)

您是否尝试将eval放入您的参数中,因为此处您只提供字符串参数。

for(var i = 1; i <= 2; i++){
    renderCharts(eval("data"+i), eval("axis"+i), "mainchart"+i)
}