在D3JavaScript中将字符串转换为数组名
我想输入数据数组的名称作为变量,但由于某些原因,它对我不起作用 因此,如果它起作用:在D3JavaScript中将字符串转换为数组名,javascript,d3.js,Javascript,D3.js,我想输入数据数组的名称作为变量,但由于某些原因,它对我不起作用 因此,如果它起作用: d3.select('#energychart').html(""); d3.select('#energychart') .selectAll('svg') .data([week3]) .enter() .append('svg') 但是这个案子,它没有 var x = "week3"; d3.select('#en
d3.select('#energychart').html("");
d3.select('#energychart')
.selectAll('svg')
.data([week3])
.enter()
.append('svg')
但是这个案子,它没有
var x = "week3";
d3.select('#energychart')
.selectAll('svg')
.data([x])
.enter()
.append('svg')
如果我理解正确,您试图通过字符串名获取名为
week3
的变量,如中所示,如果这是正确的,就我所知,它与d3无关
我建议这样做。(其中名为“week3”的变量是预定义的全局变量。)
如果week3不是全局变量,则必须设置一个变量对象,如中所示。然后,您必须用变量obj替换窗口对象(保存全局变量)
var variables = {
"week3": [3,4,5,6,7] // array can be replace with any data you want as value
};
var varName = "week3";
var x = variables[varName];
d3.select('#energychart')
.selectAll('svg')
.data([x])
.enter()
.append('svg')
编辑:
按照评论中的要求。下面是对其工作原理的解释
首先你需要知道的是窗口只是一个对象。窗口对象保存全局变量。在浏览器控制台中运行以下两行将显示所有全局变量都存储在窗口对象上
var AADataSet = [1, 2, 3, 4, 5];
console.log(window);
从对象中获取值的方法有很多种。我将向您展示从对象中获取属性的三种等效方法
var result;
var obj = { foo: 1, Bar: 2, "foo bar": 3 };
var randomVarName = "Bar"; // notice the capital B in Bar is important since it was declared that way.
result = obj.foo; // result equals 1
result = obj[randomVarName]; // result equals 2
result = obj["foo bar"]; // result equals 3
因为窗口是一个对象,变量直接存储在对象上,而不是嵌套在对象内部。您可以通过窗口[“AADataSet”]
访问AADataSet。字符串“AADataSet”也可以存储在变量中,然后使用,例如
var varName = "AADataSet";
window[varName]
它是如何不起作用的?发生了什么?您期望发生什么?它的行为就像没有输入数据一样。//发生了什么:我得到了一个空的图表///应该发生什么:我看到图表上的数据,如.data([week3])的情况。您是否同时运行这两段代码?在本例中,先前添加的SVG与数据匹配,因此未添加。感谢@John,它起到了作用,但您能解释一下您所做的window[]操作吗?@0black0rain我添加了一个编辑,对访问window对象进行了解释。
var varName = "AADataSet";
window[varName]