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

Error passing string variable to method

本文关键字:方法 出错 字符串 变量      更新时间:2023-09-26

我试图将一个变量传递给谷歌可视化方法,但如果我使用一个变量,它会不断弹出一个错误,但如果键入字符串,它会很好。我在这里错过了什么?

这项工作:

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;
  };
};

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

只需将第一行写为此

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

如果你的filteredrows实际上是一个字符串,而你不能改变它,那么首先在上使用JSON.parse

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

我猜getFilteredRows方法接受的是有效数组,而不是字符串。我建议在发送字符串之前使用JSON.parse。例如:

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

以下是我解决问题的方法,感谢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)
);