我正在尝试将变量传递给谷歌可视化方法,但是如果我使用变量但是如果我键入字符串,它会一直运行错误。我在这里缺少什么?
这有效:
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;
};
};
答案 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)
);