Javascript 所有数据都在enter()占位符(D3)中

Javascript 所有数据都在enter()占位符(D3)中,javascript,d3.js,Javascript,D3.js,我有一个更新函数,代码如下: // actualy fetched from server. array of JS objects that I parsed to right type var xData = [{ id: 234234 // parsed as integer date: 15/11/2001 // parsed as date price: 6512 // parsed as integer }]; // triggred by the user

我有一个更新函数,代码如下:

// actualy fetched from server. array of JS objects that I parsed to right type
var xData = [{
    id: 234234 // parsed as integer
    date: 15/11/2001 // parsed as date
    price: 6512 // parsed as integer
}];

// triggred by the user
function updateSVG() {

 // fetch new data from ther server
 xData = [];
 xData = [{
    id: 234234 // parsed as integer
    data: 15/11/2001 // parsed as date
    price: 6512 // parsed as integer
}];

 // join data
 var x = svg.selectAll(".x-class")
     .data(xData, function(d) { return d.id; });

 // new data
 x.enter().append("image")
     .attr('class', 'x-class')
     .attr("xlink:href", "x-image.png")
     .attr("width", 16)
     .attr("height", 19)
     .attr('y', 0);

 // current and new data
 x.transition()
     .attr("x", function(d) { return x(d.date); })
     .attr("y", function(d) { return y(d.date); });

 /// old data
 x.exit().remove();

}
我所期望的是,当我第二次或第三次运行此函数时,大多数数据将被更新,即不在enter中,只有少数数据将在enter和exit中

但我所有的数据都在回车里。不管怎样。d.id肯定是唯一的。除了这个问题,一切都正常。在获取新数据之前和之后检查x对象时,所有数据都在enter占位符中


有什么想法吗?我遗漏了什么?

代码问题让我们知道这些问题是否有帮助:

对于xd.date,x是什么?你是说这里的扩展数据吗

x、 attrx,函数d{return xd.date;}

这是干什么的?您尚未定义数据,或y。或者arrayObjectIndexOf和yOffset,但我怀疑这些都是隐含的

返回ydata[arrayObjectIndexOfdata,d.date,'date']。价格-yOffset


此外,由于D3是一个数据操作库,当我们不知道您的数据是什么样子时,通常很难提供帮助。有时我们会想到d.date,但它在这里可能很重要,因为您显然是在别处找到价格,而不是在做d.price

什么是扩展数据?在哪里进行初始数据连接的代码?我添加了一些示例代码。仍然不清楚您在做什么。你能补充一个完整的例子吗?你到底有什么问题?你能详细说明一下我所有的数据吗?对不起,误解了。当此函数运行时,D3不记得我的旧数据,并将我的所有新数据项放在enter集合中,即使有许多数据已经具有.x-class元素,并且它们具有与以前相同的d.id键。您希望xd.date和yd.date做什么?它们是天平吗?将它们更改为xScaled.date和yScaled.date,因为您的x已用作d3选择器的变量。此外,请尝试选择image.x-class。可能不会有什么不同。svg变量是什么。这可能会有所不同。在JSFIDLE中尝试您的代码,这样我们就可以看到正在发生的一切。