Javascript 在d3中编辑selectAll中每个元素的元素数据

Javascript 在d3中编辑selectAll中每个元素的元素数据,javascript,svg,d3.js,Javascript,Svg,D3.js,在该街区内— 我正在尝试为selectAll()中的每个项目的数据添加一个属性。我把这解释为这应该行得通,但实际上不行。我还尝试了一些CSV文件,这些文件以同样的方式在地图上画了一个圆圈,但也不起作用。我知道还有其他选择,比如在enter()之后使用datum,这样做确实有效,但我还有其他用例,如果这样做就太晚了 当注释掉的代码/.data(countries)未注释且当前的数据(函数(d){..})被删除时,它工作正常 有人知道我所做的是可能的吗?如果有,我做错了什么?数据的可选第二个参数是

在该街区内—

我正在尝试为
selectAll()
中的每个项目的数据添加一个属性。我把这解释为这应该行得通,但实际上不行。我还尝试了一些CSV文件,这些文件以同样的方式在地图上画了一个圆圈,但也不起作用。我知道还有其他选择,比如在
enter()
之后使用datum,这样做确实有效,但我还有其他用例,如果这样做就太晚了

当注释掉的代码
/.data(countries)
未注释且当前的
数据(函数(d){..})
被删除时,它工作正常


有人知道我所做的是可能的吗?如果有,我做错了什么?

数据的可选第二个参数是a。我建议将该地产添加到具有forEach的国家/地区:

var countries = topojson.feature(world, world.objects.countries).features;
countries.forEach(function(d){ d.code = "1"; });

svg.selectAll("path:not(.graticule)")
    .data(countries)
  .enter().append("path")
    .attr("d", path);

你应该能够以这种方式做你想做的事情,例如

.data(data, function(d) { d.bar = 10; return d.foo; })
完整的例子


这是否是一个好主意是另一个问题,答案几乎肯定是否定的。

适用于我--@Larskothoff我注意到你返回的是索引,而不是数据。这就是我错过的。你应该用这些信息创建一个答案,我会加上标记,因为它可能对其他人有用。但是,我知道这不是一个好的做法,因为这个回调的目的更多的是定义要绑定到哪些数据,而不是操作数据。不太确定您所说的“返回索引”——您是指用于匹配数据的键吗?这就是你遇到的问题吗(即数据不匹配)?@LarsKotthoff对不起,我写的没有多大意义。在“data()”回调函数的我的块中,我返回第一个参数“d”,其中a返回d的foo的实际值。话虽如此,您返回的值似乎相当随意。该值将决定数据的匹配方式,因此在实际应用中确实很重要。在我的示例中,它并不是这样,因为我只执行一次
selectAll