使用forEach()与map()

时间:2015-07-18 14:11:55

标签: javascript d3.js

我有一个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()函数的基本信息。谢谢你的任何想法!

0 个答案:

没有答案