D3.js 为什么我的d3选择索引不起作用

D3.js 为什么我的d3选择索引不起作用,d3.js,indexing,selection,D3.js,Indexing,Selection,下面是标签绘图函数的代码片段 var legend = d3.select("." + to_chart) .append("g") .selectAll("g") .data(data) .enter().append("rect") .attr("width", 20) .attr("height", 20) .attr("x", 20) .

下面是标签绘图函数的代码片段

var legend = d3.select("." + to_chart)
    .append("g")
    .selectAll("g")
        .data(data)
            .enter().append("rect")
            .attr("width", 20)
            .attr("height", 20)
            .attr("x", 20)
            .attr("y", 20)
            .attr("transform", function(d, i){return "translate(0," + i * 30 + ")";})
            .attr("style", "stroke: #000; stroke-width: 1px")
            .attr("fill", function(d, i) { return color(i); });
var legend = d3.select("." + to_chart)
    .append("g")
    .attr("class", "t")
    .selectAll(".t")
        .data(data)
            .enter().append("text")
                    .attr("x", function(data, i){return i;})
                    .attr("y", 20)
                    .text(function(i){if (i = 0){
                        return "eff";
                    } else if (i = 1) {
                        return "non-eff";
                    }
                    ;});
为什么.attr(“x”,函数(data,i){return i;})正在工作,但是
.文本部分不是吗?它总是得到“1”值。

好的,我举了一个例子……除了我提到的
函数(d,I){…}
的问题之外,您的比较运算符是错误的……您想使用
===
=
而不是
=
。这就是交易:

var data = ["mary","goes"]

var legend = d3.select("body").append("svg").append("g")
    .attr("class", "t")
    .selectAll(".t")
    .data(data)
    .enter()
  .append("text")
    .attr("x", function(d, i){return i * 30;})
    .attr("y", 20)
    .text(function(d,i){
        if (i === 0){
            return "eff";
        } else if (i === 1) {
            return "non-eff";
        }
    ;});
这导致:


eff non eff

您需要将值和索引参数传递给函数:
函数(d,i)…
。第一个参数是值,第二个是索引…如果只传递一个参数,不管您调用它d还是i,该值都是返回的值。好的,我很早就传递了它,但在函数中i始终等于1,但我期望0和1。当然,匹配迭代时它会返回0和1。很奇怪,下面的两个字符串不起作用。如果要在.text()调用中使用索引,则调用必须是
text(函数(d,i){…})
,其中d是值,i是索引。现在它是
text(函数(i){…}
,所以我表示值。如果我只返回值,它会工作。但是我想返回文本取决于索引,我必须指定。现在它是。text(函数(d,i){if…;});谢谢:)这是一个很好的纪律…我应该把它作为一个尽可能完整的例子来展示任何惊喜。我是从试图回答这个问题的人的角度讲的。这是没有必要的。一旦我能够把主要部分作为一个完整的例子,我就能清楚地看到问题。谢谢