我想将一个JSON数据数组分发到div元素中。为了给出一些想法,我做了以下fiddle。下面的文字对应于小提琴的解释以及到目前为止我得到的内容。
场景是我收到绿色框,我必须把它变成洋红色框。 为了对初始数据进行分区,我创建了一个算法如下:
我遇到的问题是这个算法不是很准确,因为在大多数情况下最大宽度太大,因为输入数据我不是先验的。因此,这会产生糟糕的结果。具体地说,它漂浮在橙色盒子下面的洋红色盒子上,因为没有足够的空间放在右边。以下代码显示了我如何计算 maxWidth :
var CHAR_W = getLetterWidth(), maxNW = 0,
statsLen = stats.names.length, maxVW = 0;
for (var n=0; n<statsLen; n++)
{
var valsLength = stats.values[n].length,
namsLength = stats.names[n].length;
if (namsLength *CHAR_W > maxNW)
{
maxNW = (namsLength *CHAR_W);
}
if (stats.values[n].toString().length*CHAR_W > maxVW)
{
maxVW = (valsLength*CHAR_W);
}
}
var maxW = maxVW+maxNW, w = <Available width of the magenta box>,
maxCol = Math.floor(w/maxW);
我的想法是,我没有固定的名称宽度,我不知道我会收到什么。我认为Math.floor函数也引入了一些问题。有时我得到4.7878列,事实上,真实数据完全适合剩下的0.7878。但是 maxWidth 大于它在分割后剩余的空间,然后div浮动在我想要避免的范围之下。
问: 如何根据可用空间将数据分成列?