gpt4 book ai didi

javascript - 附加对象等于数组中每个元素的总和

转载 作者:行者123 更新时间:2023-11-30 09:15:48 24 4
gpt4 key购买 nike

我有一个数组:circleArray = [1, 4, 2] .现在我想生成圆圈。 index 指的是我希望它们显示的每个元素的值是指特定行中的圈数

它应该是这样的:

enter image description here

这是我试过的:

// Circle Attributes
var nodeRadius = 20;
var xStart = 200, yStart = 50;
var xMargin = 50, yMargin = 50;

var circleArray = [1, 4, 2];

// SVG Viewport
var svgContainer = d3.select("body")
.append("svg")
.attr("width", 300)
.attr("height", 600);

// Append Circles
var circle = svgContainer.selectAll("circle")
.data("circleArray")
.enter()
.append("circle")
.attr("cx", function(d) { return d * xMargin + xStart; })
.attr("cy", function(d,i) { return i * yMargin + yStart; })
.attr("r", 20);
<body></body>
<script src="https://d3js.org/d3.v5.min.js"></script>

这整个事情还没有多大意义,但我最关心的是如何以元素的值代表圆的数量和索引代表行的方式处理数组的数据 。通常我设法做的就是附加等于数组长度的圆圈并完全忽略元素的值。

最佳答案

最简单的方法是使用数据数组来附加组...

var group = svgContainer.selectAll(null)
.data(circleArray)
.enter()
.append("g")
//etc...

...然后,对于每个组,使用数据的值创建另一个数组,其中包含每行所需的圆圈数:

var circles = group.selectAll(null)
.data(function(d) {
return d3.range(d)
})
.enter()
.append("circle")
//etc...

在这种情况下,我们得到每个组的数据......

.data(function(d) {
return d3.range(d)
})

... 并将其传递给 d3.range(),它创建这些数组:

  • [0]
  • [0, 1, 2, 3]
  • [0, 1]

这些值被圆圈的选择使用。当然,值本身并不重要,重要的是每个数组的长度。

这是演示(充满了魔数(Magic Number),相应地改变它们):

// Circle Attributes
var nodeRadius = 20;

var circleArray = [1, 4, 2];

// SVG Viewport
var svgContainer = d3.select("body")
.append("svg")
.attr("width", 300)
.attr("height", 300);

var group = svgContainer.selectAll(null)
.data(circleArray)
.enter()
.append("g")
.attr("transform", function(d, i) {
return "translate(" + (300 / 2 - ((d / 2) * 50)) + "," + (50 + 50 * i) + ")";
});

var circles = group.selectAll(null)
.data(function(d) {
return d3.range(d)
})
.enter()
.append("circle")
.attr("cx", function(d) {
return d * 50;
})
.attr("r", nodeRadius)
.style("fill", "red");
<body></body>
<script src="https://d3js.org/d3.v5.min.js"></script>

PS:与你的问题无关,但是.data("circleArray")是错误的。它应该是 .data(circleArray)

关于javascript - 附加对象等于数组中每个元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com