如何以可伸缩的方式分配javascript变量
假设我有以下如何以可伸缩的方式分配javascript变量,javascript,d3.js,dc.js,Javascript,D3.js,Dc.js,假设我有以下dc.js对象: var chart_11 = dc.barChart("#chart-11"), chart_12 = dc.barChart("#chart-12"), chart_13 = dc.barChart("#chart-13"), chart_21 = dc.barChart("#chart-21"), chart_22 = dc.barChart("#chart-22"), chart_23 = dc.
dc.js
对象:
var chart_11 = dc.barChart("#chart-11"),
chart_12 = dc.barChart("#chart-12"),
chart_13 = dc.barChart("#chart-13"),
chart_21 = dc.barChart("#chart-21"),
chart_22 = dc.barChart("#chart-22"),
chart_23 = dc.barChart("#chart-23");
接下来,我读入一些数据并用这些数据做一些事情:
d3.csv("../data/test_data.csv").then(function(data) {
var var_names = ["x", "y", "z", "a", "b", "c"];
var ndx = crossfilter(data),
chart_11_dim = ndx.dimension(function(d) { return +d[var_names[0]]; }),
chart_12_dim = ndx.dimension(function(d) { return +d[var_names[1]]; }),
chart_13_dim = ndx.dimension(function(d) { return +d[var_names[2]]; }),
chart_21_dim = ndx.dimension(function(d) { return +d[var_names[3]]; }),
chart_22_dim = ndx.dimension(function(d) { return +d[var_names[4]]; }),
chart_23_dim = ndx.dimension(function(d) { return +d[var_names[5]]; });
var chart_11_min = +chart_11_dim.bottom(1)[0][var_names[0]],
chart_11_max = +chart_11_dim.top(1)[0][var_names[0]],
chart_12_min = +chart_12_dim.bottom(1)[0][var_names[1]],
chart_12_max = +chart_12_dim.top(1)[0][var_names[1]],
chart_13_min = +chart_13_dim.bottom(1)[0][var_names[2]],
chart_13_max = +chart_13_dim.top(1)[0][var_names[2]],
chart_21_min = +chart_21_dim.bottom(1)[0][var_names[3]],
chart_21_max = +chart_21_dim.top(1)[0][var_names[3]],
chart_22_min = +chart_22_dim.bottom(1)[0][var_names[4]],
chart_22_max = +chart_22_dim.top(1)[0][var_names[4]],
chart_23_min = +chart_23_dim.bottom(1)[0][var_names[5]],
chart_23_max = +chart_23_dim.top(1)[0][var_names[5]];
});
虽然这项工作,它不是很干燥,也不容易保持规模。我知道必须有一种更好的方法来动态创建这些变量,但我不确定哪种方法(例如循环、映射、reduce)的缩放效果最好。我不经常使用javascript编写代码,因此我希望有经验的人能为我指明正确的方向。您可以创建一个帮助文件,将变量导出为javascript模块 因此,在名为“data.js”的模块文件中,您可以有:
export const chart11 = dc.barChart("#chart-11"),
chart12 = dc.barChart("#chart-12"),
chart13 = dc.barChart("#chart-13"),
chart21 = dc.barChart("#chart-21"),
chart22 = dc.barChart("#chart-22"),
chart23 = dc.barChart("#chart-23");
然后,无论何时需要引用someotherfile.js中的数据,都可以使用:
import {chart11, chart12, chart13, chart21, chart22, chart23} from '../data';
const chart11Min = chart11...
Idk,但这是整个节点环境中使用的模块模式。这允许单个模块声明和根据需要对该模块的任意多个导入引用。旁注:对于常量变量,建议使用
const
;对于动态变量,建议使用let
。由于缺少区分,var
关键字不是最佳做法。如果需要多个类似变量,不要在全局范围内创建它们,而是将它们存储在数组中。例如,const charts=[];对于(设i=1;i<3;++i)图[i]=db.barChart(`chart-${i}`)
拥有这个数组后,应该很容易推断出其余的干编码。如果你的变量需要一个数字,它可能不应该是一个变量。@KevinB除非是数学:x1,y1,x2,y2
:我认为这类问题与a和问题本身更相关,您可以选择将所有这些变量作为动态创建的对象的属性。选中“使用动态关键点创建对象”复选框。创建对象后,您可以在循环中使用for…或使用object.keys(…).forEach(…)