我正在尝试创建具有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列,或其他)的网格。
我想要一个对象数组,每个对象包含自己的坐标。
答案 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
我没有尝试代码,但是类似的东西应该可以工作。