首页 > 解决方案 > 在 vanilla JavaScript 的数组中创建具有 xy 坐标的对象矩阵

问题描述

我正在尝试创建具有 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 行 x 10 列(或 5 行 x 6 列,或其他)的网格。

我想要一个对象数组,每个对象都包含自己的坐标。

标签: javascriptmatrix

解决方案


您可以将两个Array.froms 链接在一起以从头开始构建嵌套数组:

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值。然后, to 的第二个参数Array.from是一个可选的映射函数,与Array.prototype.map- 在这里,我们可以通过使用 to 的第二个参数来利用它.map,它是被迭代的当前索引。

因此,通过外部从映射器Array.from获取坐标y,内部从映射器Array.from获取x坐标,我们可以从内部函数返回一个具有所需坐标的对象,这将创建网格。


推荐阅读