JavaScript闭包:在对象中动态存储组失败
javascript closures : fails with dynamicly storing groups in object
我有一个 dc.js 程序,当我为 dc 组提供单独的名称时,该程序运行良好
var group1 = dateDimension.group().reduceSum(function(d) { return d.dd; });
var group2 = dateDimension.group().reduceSum(function(d) { return d.count; });
但是当我这样做时
var groups = {};
var columns = ["dd","count"];
for (var i = 0; i < columns.length; ++i) {
var col = columns[i]
groups[col] = dateDimension.group().reduceSum(function(d) { return d[col]; });
}
它只记住最后一列,并用最后一个图表替换其他图表。
我应该如何解决这个问题
这里的问题是JavaScript中一直出现的问题。您的变量"col"的作用域为该for
循环所在的函数,因此它由传递到"reduceSum()"函数的两个匿名函数共享。
解决方案是插入另一个函数以提供列名的不同副本。 (此外,不应使用 for ... in
循环访问数组。
for (var i = 0; i < columns.length; ++i) {
(function( columnName ) {
group[ columnName ] = dateDimension.group().reduceSum(function(d) { return d[columnName]; });
})( columns[i] );
}
相关文章:
- 如何将所有同级存储在动态本地存储阵列中
- 将动态feild数据存储到jquery-mobile和php-mysql中的数据库中
- 我想在ext.js4.2中将树存储动态绑定到树面板中
- 存储动态创建的复选框值
- 存储对追加动态添加的元素的引用
- 如何保存从单击this.nameClass动态设置的本地存储
- 如何在客户端存储动态图像
- 如何从php中第一个动态生成的第二个下拉列表将数据存储到数据库中
- 将动态创建的输入中的值存储到PHP变量中
- 将动态表数据存储到数据库中
- ExtJs 动态存储失败调用句柄
- JavaScript闭包:在对象中动态存储组失败
- JQuery / JavaScript,动态存储/应用函数
- ExtJS 4.1无限网格滚动不适用于使用loadData的动态存储
- 为动态存储属性指定还原器
- Ext JS动态存储插入无法读取属性'isModel'的定义
- 如何改变Ext js动态存储数据
- Extjs 4动态存储
- 如何动态存储有关HTML元素的信息
- 在数组中动态存储li id