Data binding D3为退出绑定数据

Data binding D3为退出绑定数据,data-binding,d3.js,transition,Data Binding,D3.js,Transition,在这个jsfiddle()中,我通过传递不同的字符串来更改绑定到对象的数据键: // Create rectangles var rects = chart .selectAll('rect') .data(data, function(d) {return d + 'a'}) ... // Update data -- all should be removed d3.selectAll('rect') .data([5,6], function(d) {

在这个jsfiddle()中,我通过传递不同的字符串来更改绑定到对象的数据键:

// Create rectangles
var rects = chart
    .selectAll('rect') 
    .data(data, function(d) {return d + 'a'}) 
    ...

// Update data -- all should be removed
d3.selectAll('rect')
    .data([5,6], function(d) { return(d + 'b'); })
    .exit()
    .transition()
    .delay(2000)
    .remove();

不幸的是,它们被绑定到同一个键(即,5和6不会被删除)——是否可以在不更改我传递的数据数组的情况下区分它们?

可以传递到
。data()
的键函数将对新数据元素和已绑定的数据元素执行。也就是说,当绑定数据并使用键函数时,该函数返回的键不会与数据一起存储。这意味着,对于第二次调用,将键函数更改为什么并不重要,只要实际数据是唯一更改的内容,新数据将匹配现有数据

例如,对于数据元素
5
,键函数返回
5b
。对于已经绑定到元素的数据,它返回
1b
4b
5b
等。这两个
5b
匹配


您可以传递具有更多属性而不是数字的对象,然后使用另一个属性(对于新数据,该属性必须不同)作为键。

我不清楚您想做什么。您希望将新数据与哪些元素相匹配,即哪些
rect
s应该保留,哪些应该删除?在这种情况下,所有元素都应该删除,因为键包含字符串“b”,而不是“a”。非常感谢——我想这很明显,但我以前从未遇到过这个问题。