Arrays 使用d3获取数组长度
返回数组长度时遇到问题。我有一个数组,如下所示:Arrays 使用d3获取数组长度,arrays,d3.js,Arrays,D3.js,返回数组长度时遇到问题。我有一个数组,如下所示: var colorsquares = [ [3.3, 28, -1.5, 13, 857, 3, 5, 6, 7, 5, ["#b2dbbb","#d2e6c1"]], [1.3, 18, -1.5, 13, 857, 3, 5, 6, 7, 5, ["#c2dccc","#d2fdc1"]] ]; 我用最后的值给div上色 d3.select("#
var colorsquares = [
[3.3, 28, -1.5, 13, 857, 3, 5, 6, 7, 5, ["#b2dbbb","#d2e6c1"]],
[1.3, 18, -1.5, 13, 857, 3, 5, 6, 7, 5, ["#c2dccc","#d2fdc1"]]
];
我用最后的值给div上色
d3.select("#colorBox")
.selectAll("div")
.data(d[10])
.enter()
.append("div")
.style("background-color", function(d) {
return d;
})
.style("width", function(d) {
return (d.length + 1) + "px";
})
;
颜色出来的权利,但我没有得到我想要的宽度。我得到的不是2,而是8 在D3样式功能中:
.style("width", function(d) {
return (d.length + 1) + "px";
})
,第一个参数(您称之为d
)表示单个数组元素,例如“#b2dbbb”
或“#d2e6c1”
。D3将第一个数组元素(“#b2dbbb”
)传递给第一个div
,第二个(“#d2e6c1”
)传递给第二个div
,依此类推。因此,当您要求d.length+1
时,您要求的是字符串“#b2dbbb”
+1的长度,实际上是8
我认为您的困惑是因为您使用名称d
有两个不同的目的,一个是隐藏另一个。您可以使用它作为函数中的参数,但也可以作为对colorsquares[0]
或colorsquares[1]
的引用(这些是在某种循环还是什么?我不能更具体,因为您还没有发布所有代码)。
例如,将外部的d
(您在说.data(d[10])
时所指的那一个)更改为dd
(或更好的名称,理想情况下)。然后,在背景色函数中,您可以说
return d
但是在宽度函数中,我认为您正在寻找
return (dd[10].length + 1) + "px";
在D3样式功能中:
.style("width", function(d) {
return (d.length + 1) + "px";
})
,第一个参数(您称之为d
)表示单个数组元素,例如“#b2dbbb”
或“#d2e6c1”
。D3将第一个数组元素(“#b2dbbb”
)传递给第一个div
,第二个(“#d2e6c1”
)传递给第二个div
,依此类推。因此,当您要求d.length+1
时,您要求的是字符串“#b2dbbb”
+1的长度,实际上是8
我认为您的困惑是因为您使用名称d
有两个不同的目的,一个是隐藏另一个。您可以使用它作为函数中的参数,但也可以作为对colorsquares[0]
或colorsquares[1]
的引用(这些是在某种循环还是什么?我不能更具体,因为您还没有发布所有代码)。
例如,将外部的d
(您在说.data(d[10])
时所指的那一个)更改为dd
(或更好的名称,理想情况下)。然后,在背景色函数中,您可以说
return d
但是在宽度函数中,我认为您正在寻找
return (dd[10].length + 1) + "px";
另外,作为一个可能的提示(可能与您的案例相关,也可能与您的案例无关,但我会在案例中给出),您是否考虑过使用对象而不是数组?i、 e.{半径:3.3,位置:28,任意值:357,…,颜色:[“#b2dbbb”,“#d2e6c1”]}
。这样,您可以获得更大的灵活性和可靠性:dd.colors
比dd[10]
更容易理解,更不容易损坏。。。!!另外,作为一个可能的提示(可能与您的案例相关,也可能与您的案例无关,但我会在案例中给出),您是否考虑过使用对象而不是数组?i、 e.{半径:3.3,位置:28,任意值:357,…,颜色:[“#b2dbbb”,“#d2e6c1”]}
。这样,您可以获得更大的灵活性和可靠性:dd.colors
比dd[10]
更容易理解,更不容易损坏。。。!!