【发布时间】:2017-11-01 23:27:48
【问题描述】:
我正在尝试在 d3 图表上放置一些标签。
我有一个 DATA 对象,每个对象都有一个 DATA.rowOffset 值。基本上我的代码计算 DATA.rowOffset 并将其设置为:d.rowOffset = Math.floor(d.total/heightSquares); 但有时 rowOffset 是相同的,因此标签呈现在彼此之上。
我需要循环浏览此 DATA 并检查重复项,然后只需 +1 任何重复项。
我尝试了一种方法,查看之前的.rowOffset,然后在当前的rowOffset 上加1,但是如果有超过2 个重复项,这将不起作用。
我确信有更简单的方法......也许。
编辑:这是我主要尝试的一些代码if (d.rowOffset === DATA[i-1].rowOffset) d.rowOffset++;,因此它会检查前一行偏移量。我想我需要循环遍历所有数据,如果发现重复则重新开始循环。
DATA.forEach(function(d, i) {
d.amt = +d.amt;
d.units = Math.floor(d.amt / squareValue);
sumTotal = sumTotal + d.units;
d.total = sumTotal;
d.rowOffset = Math.floor(d.total / heightSquares);
if (i > 0) {
console.log(DATA[i - 1].rowOffset);
if (d.rowOffset === DATA[i - 1].rowOffset) d.rowOffset++;
}
【问题讨论】:
-
如果你有
[2, 2, 2]呢?你期待[2, 3, 3]还是[2, 3, 4]? -
[2, 3, 4] 所以所有值都是唯一的,如果标签试图在同一行上,它们只会堆叠在彼此下方。谢谢
-
你能显示你尝试的方法的代码吗?
-
@phocks 好的,这实际上为您的问题增加了一层复杂性,因为每个增加的副本都可能成为另一个数字的副本,并且必须考虑到这一点。我添加了一种可能的解决方案,希望对您有所帮助。
标签: javascript algorithm d3.js duplicates