2010-08-20 89 views
0

考虑下面的两种实现方式,我在JavaScript中做这个迭代吗?

data.addRows([ 
    ['2004', 1000], 
    ['2005', 1170], 
    ['2006', 660], 
    ['2007', 1030] 
]); 

上述工程(IE)能把我我想要什么。

和我的实现是,

for (var i = 0; i < 10; i++) { 
     data.addRows['row'+i,i]; 
    } 

这是一个有效的循环或我在做什么错?

我使用谷歌的可视化API绘制图表,但下面的答案不工作了,

http://jsbin.com/okafa3/edit这是http://code.google.com/apis/visualization/documentation/gallery/areachart.html

<html> 
    <head> 
    <script type="text/javascript" src="http://www.google.com/jsapi"></script> 
    <script type="text/javascript"> 
     google.load("visualization", "1", {packages:["corechart"]}); 
     google.setOnLoadCallback(drawChart); 
     function drawChart() { 
     var data = new google.visualization.DataTable(); 
     data.addColumn('string', 'Year'); 
     data.addColumn('number', 'Sales'); 


     for (var i = 0; i < 10; i++) { 
     data.addRows(['row'+i,i]); 
    } 

      var chart = new google.visualization.AreaChart(document.getElementById('chart_div')); 
     chart.draw(data, {width: 400, height: 240, title: 'Company Performance', 
          hAxis: {title: 'Year', titleTextStyle: {color: '#FF0000'}} 
         }); 
     } 
    </script> 
    </head> 
    <body> 
    <div id="chart_div"></div> 
    </body> 
</html>​ 
+0

当您仅传递数组时,addRows会期待数组的数组。 – VinayC 2010-08-20 11:22:43

回答

3

完全等效代码将

var rows = []; 
for (var i=0; i<10; i++) { 
    rows.push(['row'+i, i]); 
} 
data.addRows(rows); 

曾建议什么太阳神也将工作,除了它是不是以前代码的精确表示,因为它会对data.addRows进行多次调用。

2

你错过了功能的括号副本调用:

for (var i = 0; i < 10; i++) { 
     data.addRows(['row'+i,i]); 
    } 
+0

哦,我的上帝,我怎么可能错过了。无论如何感谢您指出。 – 2010-08-20 11:07:49

+0

至少你的循环是有效的:) – Stefanvds 2010-08-20 11:08:51

+0

@Pandiya Chendur:不用担心,这样的事情发生。你看起来很难找到一些晦涩的错误,你没有注意到明显的错误:) – nico 2010-08-20 11:28:48

2

看来你的方法addRows需要一个[string,int]的数组。因此,你需要做的:

for (var i=0; i<10; i++) { 
    data.addRows( // parenthesis for calling a method 
     [   // array of 
      ['row'+i,i] // [string, int] even if it's only one 
     ]); 

(空格和进入增加了清晰度)