0

我有 2 个多维数组。我想将小数组值插入到特定位置的较大数组中。

var largeArray = [...Array(4)].map(e => Array(4).fill(0));
var smallArray = [...Array(2)].map(e => Array(2).fill(1));

例子

这与画布上下文putImageData()函数非常相似,您可以在画布的任何位置插入一个值块。https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData

但是,我没有使用画布,我想将“PutSmallArray”放入特定 X、Y 位置的大数组中。

我怎样才能做到这一点?

4

1 回答 1

2

实现您想要的一种简单方法就是迭代smallArray值和索引,使用它们将这些值插入到适当的偏移量中largeArray

var largeArray = [...Array(4)].map(e => Array(4).fill(0));
var smallArray = [...Array(2)].map(e => Array(2).fill(1));

function insertArray(big, small, x, y) {
  small.forEach((a, i) => a.forEach((v, j) => big[y + i][x + j] = v));
  return big;
}

console.log(insertArray(largeArray, smallArray, 1, 1));

请注意,此代码不检查是否smallArray适合指定largeArrayx,y坐标。如果情况并非如此,则取决于您想要的结果(未修改的数组或仅适合修改的元素),您将需要检查索引是否超出largeArray例如的范围

var largeArray = [...Array(4)].map(e => Array(4).fill(0));
var smallArray = [...Array(2)].map(e => Array(2).fill(1));

// don't update unless the array fits perfectly
function insertArray(big, small, x, y) {
  if (small.length + y > largeArray.length ||
      small[0].length + x > largeArray[0].length)
      return big;
  small.forEach((a, i) => a.forEach((v, j) => big[y + i][x + j] = v));
  return big;
}

console.log(insertArray(largeArray, smallArray, 3, 1));

于 2020-10-04T06:15:32.207 回答