Я хотел бы создать массив координат, чтобы мне не приходилось вручную записывать 100 пар значений x и y. Я думал об использовании цикла for внутри другого цикла for, но не смог этого добиться.

Я хотел бы создать пустой array с именем CoordsArray и, используя метод push внутри самого внутреннего for, создать смешанный массив следующим образом:

var coordsArray = [
{x:0,y:0},{x:0,y:20},{x:0,y:40},{x:20,y:0},{x:20,y:20},{x:20,y:40},{x:40,y:0},{x:40,y:20},{x:40,y:40}
]

Использование приведенного выше кода предназначено для создания трех строк из трех кругов (с использованием D3js) без создания массива вручную, потому что позже мне придется создать 10 строк из десяти кругов и создать положение x и y каждого из них. быть очень громоздким. Как лучше всего этого добиться? Спасибо.

0
Julio Rodriguez 13 Сен 2018 в 16:32

2 ответа

Лучший ответ

Я вижу такую картину:

  • значение x - это (индекс массива / количество столбцов), округленное в меньшую сторону до ближайшего целого числа
  • значение y - это модуль (индекс массива / количество столбцов)

Итак, вы можете начать с пустого массива длины (строки * столбцы), заполнить каждую запись размером круга, а затем сопоставить каждый элемент с объектом, созданным путем умножения значения массива на эти вычисления x и y ...

let rows = 3,
    cols = 5,
    size = 20;

let data = new Array(rows*cols)
    .fill(size)
    .map((d, i) => ({
        x: d * Math.floor(i/cols),
        y: d * (i%cols)
    }));

console.log(data);

Конечно, он может быть не так удобочитаем, как вложенные циклы, но мне это нравится ...

2
SteveR 15 Сен 2018 в 13:23

Вы всегда должны публиковать код, который вы пробовали.

Вот один из способов:

var coordsArray = [];

const rows = 10,
  cols = 10,
  size = 20;

for (var row = 0; row < rows; row++) {
  for (var col = 0; col < cols; col++) {
    coordsArray[row * cols + col] = [row * size, col * size];
  }
}
0
Chris G 13 Сен 2018 в 13:38