在香草JavaScript的数组中创建具有x y坐标的对象矩阵

时间:2018-10-06 23:46:41

标签: javascript matrix

我正在尝试创建具有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 :(得分:3)

您可以将两个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坐标,则可以从内部函数返回具有所需坐标的对象,这将创建网格。

答案 1 :(得分:0)

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

我没有尝试代码,但是类似的东西应该可以工作。