Я делаю эту итерацию прямо в JavaScript? - PullRequest
0 голосов
/ 20 августа 2010

Рассмотрим две реализации ниже,

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

Вышеуказанное работает (то есть) оно дает мне то, что я хочу.

и моя реализация,

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

Это действительный цикл for или что я делаю не так?

Я использую API визуализации Google для рисования диаграмм, но ответы ниже не получаются,

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>​

Ответы [ 3 ]

3 голосов
/ 20 августа 2010

Точный эквивалентный код будет

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

То, что предложил Гелиос, также будет работать, за исключением того, что оно не является точным представлением более раннего кода, так как оно будет делать более одного вызова data.addRows.

2 голосов
/ 20 августа 2010

Кажется, вашему методу 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
      ]);

(пробелы и вводы добавлены для ясности)

2 голосов
/ 20 августа 2010

Вам не хватает скобки вызова функции:

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