D3.js d3.map()值如何重置为默认值?

D3.js d3.map()值如何重置为默认值?,d3.js,D3.js,我在更新模式中使用d3.map()来映射一些值 我的代码如下所示: selectedNeighborhood.map(function(d) { rateById.set(d.endneighborhood, d.rides); }) ; 我的问题是,当我进行新的选择和更新时,地图将展开,而不是用一组新的值替换现有地图。我希望我的地图在每次运行更新功能时重置回默认值。我该怎么办 一种工作方法(不干净)是将map对象设置为{},然后将map全部重新定义为变量名。将rateById重新设置为新的空

我在更新模式中使用d3.map()来映射一些值

我的代码如下所示:

selectedNeighborhood.map(function(d) { rateById.set(d.endneighborhood, d.rides); }) ;
我的问题是,当我进行新的选择和更新时,地图将展开,而不是用一组新的值替换现有地图。我希望我的地图在每次运行更新功能时重置回默认值。我该怎么办


一种工作方法(不干净)是将map对象设置为{},然后将map全部重新定义为变量名。

rateById重新设置为新的空白map并不完全不干净,但是,如果有一些对象/函数在单独的变量中保留对
rateById
值的引用,则可能会导致错误,在这种情况下,现有引用不会更新以指向新创建的映射

您希望“就地”清除映射(即对其进行变异,以便var
rateById
继续指向相同的
d3.map
)。您可以通过在其条目上循环并逐个删除它们来执行此操作:

rateById.forEach(function(key) { rateById.remove(key); });

顺便说一句:这没什么大不了的,但是仍然使用数组
map()
进行循环,就像在
selectedNeighborhood.map(…)
中一样,最后实例化并返回一个新的
未定义的
数组。如果
selectedneighborary
是一个巨大的数组,这将是一种浪费(在内存和CPU方面)。使用
selectedneighbory.forEach(…)
可以获得相同的结果,但不创建新数组,因此更合适。

什么是
selectedneighbory
,如果是
d3.map()
它有
map()
方法吗?也许
selectedNeighborhood
是d3选择?如果是这样,对其调用
map()
恰好不会引发错误,因为d3选择扩展了JavaScript的数组,该数组具有
map()
方法,但对d3选择调用
map()
在d3 API中是无效的操作。一句话,我们不清楚你在问什么,也不清楚这是如何构成使用
d3.map()
。SelectedNeighborary是一个d3值数组,我用它来设置RateById的map值。也许这不是最好的解决方案(我所要做的就是建立一种方法来创建一个匿名函数,将这些值级联在一起,以便在我的映射中使用)。我认为您太关注我的特定代码片段,而关注一般问题。好吧。。。现在我明白了。。。没有得到
rateById
是地图。