我有一个d3强制布局图,当页面加载时,显示4个节点,其中正确的数据绑定完美。然后我给用户一个选项,点击一个按钮,根据节点数量(现在应该是10),以及它背后的所有数据(即适用于4个初始节点的信息都没有),实质上改变了我的整个可视化。有关)。
在页面加载中,我得到这样的数据......
var nodes = theData.map(function (d, i) {
var random = Math.floor(Math.random() * m);
return {
radius: circleRadiusScale(d.entity_count),
person: d.person,
cx: clusterScale(random),
cy: height / 2
};
});
然后在我的"更改所有数据按钮"我有同样的方法......
function updateNodeData(dataToUpdate) {
nodes = null;
nodes = dataToUpdate.map(function (d, i) {
var random = Math.floor(Math.random() * m);
return {
radius: circleRadiusScale(dataToUpdate[i].entity_count),
person: dataToUpdate[i].person,
cx: clusterScale(random),
cy: height / 2
};
});
}
上述代码的问题在于,虽然它确保添加了额外的6个节点,但是我开始使用的4个数据的数据不会更新。我开始认为我的更新/退出选择有问题,但后来我在#34中尝试了这个代码,更改了所有数据按钮" ...
function updateNodeData(dataToUpdate) {
nodes.forEach(function (d, i){
var random = Math.floor(Math.random() * m);
d.radius = circleRadiusScale(dataToUpdate[i].entity_count);
d.person = dataToUpdate[i].person;
d.cx = clusterScale(random);
d.cy = height / 2;
});
}
对于这个nodes.forEach方法,我开始使用的4个节点的数据已成功更新(但当然,现在我没有在页面上有新的6个节点)。
对我来说真的很奇怪,如果我在同一个按钮中使用两种方法(即映射新数据以便我有10个元素,然后执行forEach(),这样他们就可以了。重新更新),然后我得到与我开始时完全相同的结果--10个元素,其中只有6个是正确的。
真的希望某些人听起来很熟悉,并且我遗漏了一些关于这些map()和forEach()函数的基本信息。谢谢你的任何想法!