создать матрицу объектов с координатами xy в массивах в vanilla JavaScript - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь создать матрицу объектов с координатами x, y.

Например:

var simpleMatrix = [
    [{x: 0, y: 0}, {x: 0, y: 1}],
    [{x: 1, y: 0}, {x: 1, y: 1}],
]

console.log('simpleMatrix is: ', simpleMatrix)

Как мне абстрагировать это в функцию, чтобы я мог генерировать большую сетку?Например, сетка с 10 строками на 10 столбцов (или 5 строками на 6 столбцов, или что угодно).

Мне нужен массив объектов, каждый из которых содержит свои собственные координаты.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018
var inputCoord = [];
var matrix;

function initMatrix( rows, cols ) {

    var index = 0;
    var aMatrix = [];
    for( var x = 0; x < rows; x++ ) {

        var aRow = [];
        for( var y = index; y < inputCoord.length; y++ ) {

            aCol.push( inputCoord[ y ] );

            if( y == ( cols - 1 ) ) {
                index += cols;
                break;
            }
        }

        aMatrix.push( aRow );

    }

    return aMatrix;

}

inputCoord.push( { x: 0, y: 1 } );
inputCoord.push( { x: 0, y: 1 } );
inputCoord.push( { x: 0, y: 1 } );
inputCoord.push( { x: 0, y: 1 } );
inputCoord.push( { x: 0, y: 1 } );  
inputCoord.push( { x: 0, y: 1 } );

matrix = initMatrix( 2, 3 ); //rows * cols have to always be equal to inputCoord.length

Я не пробовал код, но что-то вроде этого должно работать.

0 голосов
/ 07 октября 2018

Вы можете объединить две Array.from вместе для создания вложенных массивов с нуля:

const makeMatrix = (lengthX, lengthY) => (
  Array.from(
    { length: lengthY }, (_, y) => Array.from(
      { length: lengthX }, (_, x) => ({ x, y })
    )
  )
);
console.log(makeMatrix(2, 2));
console.log(makeMatrix(3, 1));

Первый аргумент Array.from - это объект, который интерпретатор пытается превратить в массив.Передача объекта со свойством length создаст массив этой длины со значениями undefined.Затем второй аргумент Array.from является необязательной функцией отображения, такой же, как Array.prototype.map - здесь мы можем использовать это, используя второй аргумент для .map, который является текущим индексом, который повторяется.

Итак, с помощью внешней Array.from, получающей координату y от преобразователя, а внутренней Array.from, получающей координату x от преобразователя, мы можем затем вернуть объект с нужными координатами извнутренняя функция, которая создаст сетку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...