d3,数据.输入,不同的组

d3, data .enter, different groups

本文关键字:输入 数据 d3      更新时间:2023-09-26

我将数据分隔在一个数组dict中。var BTNDATA={'B0':[0],'B1':[1] }

当我按下一个按钮时,我只想更新那一排圆圈。(我有5个按钮,5行)

我可以点击添加svg圆形元素。我通过向dicts数组推送1来更新BTNDATA dict。BTNDATA[B0].push(1)

这似乎更新了所有的键数组,而不仅仅是那个特定的数组。

问题是我只想在每次按下按钮时显示一个相应的圆圈(即行)。我无法分离cy属性的行元素。

我不明白为什么我不能直接推到数组的dict?我试图从dict中创建一个数组切片,但没有成功。我尝试创建单独的组,添加附加到这些组,而不仅仅是svg容器。

这是d3更新的进入-退出代码:

function addCrl( bi, crldt) {
var i, btni, crl, shm, drow;
//data
drow = BTNDATA[bi].slice()
crl = svg1.selectAll("circle") 
         .data(drow)
//update
//enter
crl.enter()
    .append("circle")
    .attr('class', function(){ return 'c'+btni})
    .attr('cx', function() {
        return btni + 13
    })
    .attr('cy', function(){
        return drow.length * 2;
    } )
    .attr("r",13)
    .style("fill","red")
//exit  
dlt(crl,bi)
crl.exit()
    .remove()

}

这是我称之为的循环

function addBtnClk(bid) {
d3.select('#'+bid).on("click", function() {
    BTNDATA[bid].push(1);
    var crldt = BTNDATA[bid].slice()
    addCrl( bid, crldt );
});
}
function main(){
var i;
//add buttons/eventhandler
for(i=0; i<5; i++){
    domBtn( pr[i], ky[i] )
    addBtnClk( ky[i] )
   }
}

Javascript中没有dict——您所说的是一个对象。您要查找的语法是BTNDATA.B0.push(1)BTNDATA['B0'].push(1)。在您当前的代码中,变量B0被取消引用以索引到BTNDATA中,这会给您带来不希望的结果。