2010-08-20 27 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 
     ]); 

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