将多维数组插入多维数组 - Javascript
Insert a multidimensional array into a multidimensional array - Javascript
我有 2 个多维数组。我想将小数组值插入到特定位置的大数组中。
var largeArray = [...Array(4)].map(e => Array(4).fill(0));
var smallArray = [...Array(2)].map(e => Array(2).fill(1));
这与 canvas 上下文 putImageData() 函数非常相似,您可以在 canvas 的任意位置插入一个值块。 https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData
但是,我没有使用 canvas,我想将“PutSmallArray”放入大数组的特定 X、Y 位置。
我该怎么做?
一个简单的方法来实现你想要的只是迭代 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
是否在指定的 x,y
坐标处位于 largeArray
内。如果情况并非如此,则取决于您想要的结果(未修改的数组或仅适合修改的元素),您将需要检查索引是否超出 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));
我有 2 个多维数组。我想将小数组值插入到特定位置的大数组中。
var largeArray = [...Array(4)].map(e => Array(4).fill(0));
var smallArray = [...Array(2)].map(e => Array(2).fill(1));
这与 canvas 上下文 putImageData() 函数非常相似,您可以在 canvas 的任意位置插入一个值块。 https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData
但是,我没有使用 canvas,我想将“PutSmallArray”放入大数组的特定 X、Y 位置。
我该怎么做?
一个简单的方法来实现你想要的只是迭代 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
是否在指定的 x,y
坐标处位于 largeArray
内。如果情况并非如此,则取决于您想要的结果(未修改的数组或仅适合修改的元素),您将需要检查索引是否超出 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));