将Object函数传递到d3中的data()中

Passing Object function into data() in d3

本文关键字:data 中的 d3 Object 函数      更新时间:2023-09-26

http://bl.ocks.org/mbostock/1134768

我正在学习如何使用d3来渲染数据。我试图理解上面的代码中发生了什么,特别是在片段中:

// Add a rect for each date
var rect = cause.selectAll("rect")
.data(Object) // THIS IS WEIRD TO ME....
.enter().append("svg:rect")
.attr("x", function(d) { return x(d.x); })
.attr("y", function(d) { return -y(d.y0) - y(d.y); })
.attr("height", function(d) { return y(d.y); })
.attr("width", x.rangeBand());

对象构造函数在.data()中做什么?我认为data()会强制对函数求值,所以实际上是在创建一个对象?为什么需要为causes中每个数组的每个元素插入一个矩形?

看看这个答案。

它被用作身份函数——以前与选择绑定的内容仍然绑定。这种模式通常是必要的,因为您必须调用.data()才能获得更新选择。

就我个人而言,我非常不喜欢这样混淆我的代码;我更愿意做.data(function(d) { return d;}),因为我在那里做的事情很明显。YMMV。