У меня 100 прямоугольников расположены в квадрате 10x10. Я хочу цвет число прямоугольников согласно номерам в следующем массивеКак заполнить число прямоугольников в строке, соответствующей номерам в массиве. d3.js
var avg = [1, 4, 4, 7, 11, 15, 58]
Я застрял на значение 4, так как он появляется в два раза плюс код выглядит очень некрасиво. Есть ли лучший способ достичь этого, не используя if/else?
Выход должен быть 1 прямоугольник должен иметь цвет от цвета [0], а затем 4 Прямоугольники из цветов 1 и следующий 4 из цветов [2] и так далее. 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