Javascript 如何使用d3.js、force和network仅使用一个函数设置cx和cy?
我所发现的一切都是这样来改变Javascript 如何使用d3.js、force和network仅使用一个函数设置cx和cy?,javascript,d3.js,Javascript,D3.js,我所发现的一切都是这样来改变 .attr("cx", function(d) {var x... return x; }) .attr("cy", function(d) {var y... return y; }) 但是我有一个函数F(x,y),它返回{x:value,y:value} 因为这个F函数在计算上很昂贵,所以我不能调用它两次 我需要这样的东西: node.attr("[cx,cy]", function(d){ return F(d.x,d.y) } 只需为每个节点设
.attr("cx", function(d) {var x... return x; })
.attr("cy", function(d) {var y... return y; })
但是我有一个函数F(x,y)
,它返回{x:value,y:value}
因为这个F
函数在计算上很昂贵,所以我不能调用它两次
我需要这样的东西:
node.attr("[cx,cy]", function(d){ return F(d.x,d.y) }
只需为每个节点设置cx
和cy
调用函数F
一次即可。
它位于函数tick()
中。我认为node.attr(…)
会自动调用每个节点的函数,这就是为什么我不在node.attr(…)
行之前执行函数F
有什么方法可以做到这一点吗?您可以预先计算一次值并将其存储在数据对象中:
data.forEach(function (d) {
var result = F(d.x, d.y);
d.computedX = result[0];
d.computedY = result[1];
});
后来:
node.attr("cx", function(d) { return d.computedX; })
.attr("cy", function(d) { return d.computedY; })