在 D3.js 中调用函数作为数据
calling a function as data in D3.js
我刚刚开始使用 d3.js并且正在浏览 Nick 在 github 上的源代码,并卡在将函数作为数据传递到 d3.js 的部分。
分配给next var
的函数中的var x
从 0 增加到loop counter
,如下面的 jsbin 链接所示。我无法完全理解 x 如何自动递增,以及它如何知道每次都需要递增的循环计数器。
的?
next variable
是从>>newdata
从>>render function
调用
我只是在这里设置了一个 jsbin。
这部分:
.data(newData);
只是调用 newData
函数并将返回绑定到选择。
因此,每次调用setInterval
中的render
都只是将next
函数推送到他的data
数组中。
这部分然后:
selection.attr("class", "v-bar")
.style("height", function (d, i) {
return d(i) + "px"; // <- E
})
.select("span")
.text(function(d, i){
return d(i); // <- F
});
调用 d
这是数据数组中每个元素的next
函数。它传递data
数组中的索引位置。
所以第一个render
调用是:
15 + 0 * 0;
二是:
15 + 0 * 0;
15 + 1 * 1;
三是:
15 + 0 * 0;
15 + 1 * 1;
15 + 2 * 2;
首先,为了简化起见,这个
var selection = d3.select("#container").selectAll("div")
.data(newData); // <- D
就像写作一样
var arrayOfFunctions = newData();
var selection = d3.select("#container").selectAll("div")
.data(arrayOfFunctions); // <- D
因此,例如,调用此代码 3 次(通过 setInterval)会建立如下arrayOfFunctions
:
arrayOfFunctions = [
function (x) { return 15 + x * x; },
function (x) { return 15 + x * x; },
function (x) { return 15 + x * x; }
]
(注意:从字面上看,它不是那样的,因为实际上它们只是指向同一功能的指针next
所以没有什么会增加x
.但是一旦它将这些函数绑定到 DOM 元素(通过 data(arrayOfFunctions)
并运行此位:
selection.attr("class", "v-bar")
.style("height", function (d, i) {
return d(i) + "px"; // <- E
})
d
是function (x) { return 15 + x * x; }
的,i
(即 0、1 或 2)在调用该函数时作为x
传入d(i)
。
这就是本质上增加x
的原因。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 如何将firebase数据传递到函数中
- 为什么不'我们在javascript中使用函数参数的数据类型
- Meteor Router数据函数被调用两次
- onChange 函数更改表中显示的数据
- 如何降低此函数的复杂性,该函数根据数据类型进行回调
- 函数jquery.html()不提供数据属性集值
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 从AJAX回调函数中分离数据
- 如何在从客户端接收数据时从本机方法触发javascript函数?
- 在p:dataScroller中添加的数据丢失了Javascript函数
- 为什么在调用父构造函数时在[]中发送数据
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- 表单中的数据不会传递给提交函数-使用Angular
- 如何拦截 jQuery Datatables 搜索函数以在搜索之前重新加载数据(函数的名称是什么)
- Jquery Html数据函数
- JQuery数据函数返回错误的值
- 如何保持数据函数和变量DRY
- 用Angular Bootstrap Calendar传递额外的数据给单元格数据函数
- 若忽略语句,则映射API存储数据函数