将字符串变量传递给method时出错

时间:2013-08-19 07:09:30

标签: javascript google-visualization

我正在尝试将变量传递给谷歌可视化方法,但是如果我使用变量但是如果我键入字符串,它会一直运行错误。我在这里缺少什么?

这有效:

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows([{column: 0, value: 'someval'}])
);

这不起作用:

filteredrows = "[{column: 0, value: 'someval'}]";

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows(filteredrows)
);

我得到的错误是:

“未捕获错误:columnFilters必须是非空数组”

修改

我正在尝试构建一个数组/字符串,以将所有仪表板控件状态作为getfilteredrows()的过滤条件传递。下面是我用来构建数组的代码。我也试过创建一个字符串,但无论如何它都不被接受......

control_states = [ctrl1.getState(),ctrl2.getState(),ctrl3.getState()];
var filteredrows = {};
var cnt = 0;
for (var i = 0; i < control_states.length; i++) {
  var picker_state = control_states[i]
  for (var j = 0; j < picker_state.selectedValues.length; j++) {
    filteredrows[cnt] = "column: " + i + ", value: '" + picker_state.selectedValues[j] + "'";
    cnt += 1;
  };
};

3 个答案:

答案 0 :(得分:1)

一个是JSON,另一个是实际数组。

只需将第一行写为

var filteredrows = [{column: 0, value: 'someval'}];

如果您的filteredrows实际上是字符串而您无法更改,请先使用JSON.parse

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows(JSON.parse(filteredrows))
);

答案 1 :(得分:1)

我猜方法getFilteredRows接受有效数组而不是字符串。我建议先使用JSON.parse发送字符串。即类似的东西:

filterdata.getFilteredRows(JSON.parse(filteredrows));

答案 2 :(得分:0)

以下是我解决问题的方法,感谢naomik和Krasimir指出我正确的方向!

control_states = [ctrl1.getState(),ctrl2.getState(),ctrl3.getState()];

var filteredrows = [ ];
var cnt = 0;
for (var i = 0; i < control_states.length; i++) {
  var picker_state = control_states[i]
  for (var j = 0; j < picker_state.selectedValues.length; j++) {
    filteredrows[cnt] = [ ];
    filteredrows[cnt]["column"] = i;
    filteredrows[cnt]["value"] = picker_state.selectedValues[j];
    cnt += 1;
  };
};

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows(filteredrows)
);