javascript:在稍后评估的函数中设置值
javascript : setting values in a function that will be evaluated later
对不起,我真的不知道如何描述这个问题,这可能也让我找不到答案。
但从我的代码来看,这个问题应该是可以理解的。
第一件事:代码是有效的,但我不喜欢我实现的变通方法,所以我想知道你们是否知道更好的方法来实现同样的事情。
我创建了一种助手函数来处理d3js:中的汇总
function puD3Rollup(data,keys,rollups)
{
var nested_data = d3.nest();
for (var k=0;k<keys.length;k++)
nested_data= eval("nested_data.key(function(d) { return d["+keys[k]+"];});");
nested_data= nested_data.rollup(function(leaves)
{
var ret = {};
for (var i=0;i<rollups.length;i++)
{
if (rollups[i].rollup==__stem.count) ret[rollups[i].name]= leaves.length;
if (rollups[i].rollup==__stem.sum) ret[rollups[i].name]= d3.sum(leaves, function(d) {return parseFloat(d[rollups.column]);});
if (rollups[i].rollup==__stem.avg) ret[rollups[i].name]= d3.mean(leaves, function(d) {return parseFloat(d[rollups.column]);});
if (rollups[i].rollup==__stem.min) ret[rollups[i].name]= d3.min(leaves, function(d) {return parseFloat(d[rollups.column]);});
if (rollups[i].rollup==__stem.max) ret[rollups[i].name]= d3.max(leaves, function(d) {return parseFloat(d[rollups.column]);});
}
return ret;
});
return nested_data.entries(data);
}
我把这个函数称为
puD3Rollup(__team.data,[1],[{rollup:__stem.count,column:3,name:"pscount"}])
这需要:
-数据数组(__team.data)
-指定要在位置1按列分组
-最后将一列定义为输出,该列是输入列3的汇总(计数),标签为"pscount"。
问题在于eval部分(我不喜欢)。通常我会有
nested_data= nested_data.key(function(d) { return d[keys[k]];});
但由于我正在定义一个稍后将要评估的函数,它将无法获得k的正确值,因此也无法获得keys[k]的正确值。显然,将函数求值为文本,从而使keys[k]为常量,是可行的。
但是,有没有一种更清洁的方式来实现这一点?我有一种感觉,一定有一个琐碎的解决方案我错过了。。。
谢谢!
这里最简单的方法(假设IE9或更高版本,或其他浏览器)可能是用.forEach
调用替换for
循环:
keys.forEach(function(k) {
nested_data = nested_data.key(function(d) {
return d[k];
});
...
})
回调的参数k
现在"绑定"在内部.key
回调的范围内,并且在调用时将保持正确的值。
相关文章:
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 使用JAVASCRIPT转换货币.可以't通过我的函数设置转换后的输入文本字段的值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- 为什么我需要为扩展函数设置构造函数
- 使用命名函数设置多个事件响应
- 如何通过回调函数设置值
- 为模式设置的值在通过 AJAX 成功函数设置时不显示
- 如何停止一个函数并将其他函数设置为在 html5 的 javascript 中加载时运行
- 如何为JavaScript函数设置变量以嵌入视频
- 使用jquery每个函数设置最大计数
- angularjs如何为函数设置观察程序
- Javascript:为作为参数传递的函数设置参数
- 函数设置为允许的范围是什么
- 在 javascript 中从函数设置对象的值,而无需调用该函数
- 如何使用 javascript 函数设置 href 参数值
- 函数/设置间隔意外记录两次到控制台
- 我在输入字段上触发绑定时将函数设置为未定义
- CKEDITOR函数+设置
- 如何将点击函数设置为多个元素
- 在 Backbone 中将函数设置为属性.js给了我一个错误,但如果我在初始化方法中设置它,它会起作用