私は100個の長方形を10x10の正方形に並べました。私はそれが二回表示されているプラスのコードは本当に醜いので、私は値4で立ち往生しています次の配列配列内の数字に対応する行の四角形の数を塗りつぶす方法。 d3.js
var avg = [1, 4, 4, 7, 11, 15, 58]
で番号に従って色に矩形の数をしたいです。 if/elseを使用せずにこれを達成するより良い方法はありますか?
出力は、色[0]の色と、色1の4つの四角形と、色[2]などの次の4つの四角形である必要があります。ここ JS fiddle 私のコードです:
var avg = [1, 4, 4, 7, 11, 15, 58]
var colors = ['#009BFF', '#AAC30A', '#DC0f6e', '#82b905', '#96be00', '#C8D205',
'#82141E', '#BE232D', '#E14614', '#EB6E14', '#EB8614', '#F0AA00'
]
var ContainerWidth = document.querySelector('#mainContainer').offsetWidth;
var rectWidth = ContainerWidth/20
var svgContainer = d3.select("#boxy")
var rectangle = svgContainer.selectAll("rect")
.data(d3.range(100));
var rectangle = rectangle.enter()
.append("rect")
.style("stroke", "#fff")
.style("fill", function(d, i){
for(var k=0; k<avg.length; k++){
if(i<=avg[0]-1){
return colors[0]
} else if(i<=avg[1] && i>=avg[0]-1){
return colors[1]
} else if(i<=avg[2]-1 && i>=avg[1]-1 || avg[2]-1===avg[1]-1){
return colors[2]
} else if(i<=avg[3]-1 && i>=avg[2]-1){
return colors[3]
}
}
})
.attr("x", function(d, i) {
return i % 10 * 45
})
.attr("y", function(d, i) {
return Math.floor(i/10) % 10 * 45
})
.attr("width", rectWidth)
.attr("height", rectWidth);
をいくつかの要素のグリッドを設定する方法の周りの多くの例がありますが、たとえば、 、[* "グリッドのフィルタリング" *](http://bl.ocks.org/herrstucki/5710596)、[* "グリッドのソート" *(http://bl.ocks.org/herrstucki/5694697) 。 – altocumulus