很抱歉这个奇怪的标题,但我不确定这些函数叫什么:
options: {
someTrait: function(d) { return doSomething(d, outerScopeArray[i]); }
}
起初我认为它们是匿名函数,但它不知何故期望第一个变量成为某种东西。所谓的内容对我来说更有用了。
我遇到的问题是我希望这个函数访问外部作用域中的变量。 (outerScopeArray [i])它目前总是未定义的。
编辑:这就是实际被称为
的方式 testDurations[i] // data here is accessible, this section is repeated multiple times in a loop
$(newGraph).lineChart({
options: {
tickFormat: function(d) {
//testDurations[i] here is undefined.
console.log("testing durations", testDurations[i], "--", 10*60000)
if (testDurations[i] <= 10*60000){
return d3.time.format('%H:%M:%S')(new Date(d));
}
else{
return d3.time.format('%H:%M')(new Date(d));
}
},
});
答案 0 :(得分:0)
多一些代码会有所帮助(我不太确定你在哪里使用它),但是如果你试图根据数据元素的索引访问一个数组,你可以使用:
function(d,i) { return doSomething(d, outerScopeArray[i]); }
此处,i
将包含当前数据元素d
的索引。
答案 1 :(得分:0)
我设法冻结了这样的值,同时仍然返回一个符合d3.js协议的函数。
//define this outside the for loop
var tickFormatFunction = function (v) {
return function(d) {
console.log("testing durations", v , "--", v)
if (v >= 10*60000){
return d3.time.format('%H:%M')(new Date(d));
}
else{
return d3.time.format('%H:%M:%S')(new Date(d));
}
}
}
//call like this
tickFormat: tickFormatFunction(testDurations[i]),