Javascript 访问d3中不同级别的嵌套列表

Javascript 访问d3中不同级别的嵌套列表,javascript,d3.js,Javascript,D3.js,假设我有一个具有以下格式的列表: dataset = [["10", "asdf"], ["20", "jkl"], ["30", "bla"]] 我想在每个嵌套列表的第二个元素中为每个单独的字符追加文本。我还希望每个字母的x位置由列表的第一个元素确定。因此,例如,a的x位置应该是10,对于s-11,d-12。。。对于j-20,对于k-21,等等 在到目前为止的代码中,我只显示了第一个字母,因为我没有遍历列表的正确部分: chartBody.selectAll("exampletext")

假设我有一个具有以下格式的列表:

dataset = [["10", "asdf"], ["20", "jkl"], ["30", "bla"]]
我想在每个嵌套列表的第二个元素中为每个单独的字符追加文本。我还希望每个字母的x位置由列表的第一个元素确定。因此,例如,
a
的x位置应该是
10
,对于
s
-
11
d
-
12
。。。对于
j
-
20
,对于
k
-
21
,等等

在到目前为止的代码中,我只显示了第一个字母,因为我没有遍历列表的正确部分:

chartBody.selectAll("exampletext")
                       .data(dataset)
                       .enter()
                       .append("text")
                       .attr("class", "exampletext")
                       .text(function(d) {
                            for (var i=0; i <= d[1].length; i++)
                                {
                                    return d[1][i];
                                }
                       })
                       .attr("x", function(d) {
                            for (var i=0; i <= d[1].length; i++)
                                {
                                    return xScale(+d[0]) + i; 
                                }
                       })
                       .attr("y", h/2);
chartBody.selectAll(“exampletext”)
.数据(数据集)
.输入()
.append(“文本”)
.attr(“类”、“示例文本”)
.文本(功能(d){

对于(var i=0;i我不知道您为什么需要它(读取该输出非常困难),但它在这里:

重要的变化是在输入d3之前建立字母和位置列表:

var dataset, h, i, letter, pair, r, viewport, xScale, _i, _j, _len, _len1, _ref;

dataset = [["10", "asdf"], ["20", "jkl"], ["30", "bla"]];

r = [];    
i = 0;

/*loop each pair, push into a new array */


for (_i = 0, _len = dataset.length; _i < _len; _i++) {
  pair = dataset[_i];
  i = 0;
  _ref = pair[1];
  for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
    letter = _ref[_j];
    r.push([+pair[0] + i, letter]);
    i++;
  }
}

我在这里制作了一个可读性稍高的版本:。如果您想增加字母之间的差异,请查看d3颜色函数,如:
d3.scale.category10()

d[2]是“x”属性函数中的第三个元素,您是指
吗(var i=0;我是的,刚刚修复了它,代码仍然工作。您的文本函数和x属性函数将在每个列表项[“10”,“asdf”]中运行一次。它将有一个文本属性和一个x属性。您想查看“a-10 s-11 d-12 f-13”的文本吗对于文本?x的期望值是多少?或者您正在寻找给定这三个节点的10个文本/x属性?当数组不大时,这个答案很有效,就像您的完美示例中那样…但是当字符串特别大时,生成额外的数组似乎计算量太大,这意味着100-1000个字符。当将此代码实现到我的代码中,即使r显示在控制台上(1289个字符=1289个数组),字母也不会显示但在此之前我不知道coffeescript:/谢谢!当然,但想想这些东西在内存中有多小,1200个数组位置中的1200个字符在内存方面并不是一个大问题;另外,如果你需要1200个字符在屏幕上,那么,为什么你需要那么多呢?如果你用d3呈现一页文本,这是一个糟糕的想法。我正在尝试b构建一个微型基因组浏览器,以可视化DNA序列。它不是一个可以查看整个基因组甚至染色体的合法浏览器,它设计为一次查看一个基因。一个基因可以是1000到10000个碱基对(字符)很长。我希望用户能够放大,并看到每个碱基对的位置。事实上,我的数组是这样的:
[[“50376619”,“aaaacaacgaaggaagaac…”,[“50384973”,“agataagatagattaa…”,…]
我想我是想把问题简化一点。很抱歉,它成功了!我忘了在我的x属性上添加xScale。做得好,非常感谢!这是D3的一个有趣的应用程序,完成后你应该将它发布到github上。
dataset = [["10", "asdf"], ["20", "jkl"], ["30", "bla"]]
r = []
i = 0 
#loop each pair, push into a new array
for pair in dataset
  i = 0
  for letter in pair[1]
    r.push([+(pair[0]) + i, letter]) 
    i++