[英]How to fill an 2D array with a 2D Smaller array in JavaScript
如果這沒有得到很好的解釋,我深表歉意。 我對 JavaScript 很陌生。
我有一個 10x10 的 2D arrayA 和一個 5x8 的 2D arrayB。 默認情況下,較小的 arrayB 填充了數據,而較大的 arrayA 填充了 0。
如何將數據從 arrayB 移動到 arrayA,同時仍將 arrayA 的剩余空間保留為 0?
最終結果必須是 arrayA 應該包含與 arrayB 相同順序的所有數據,但剩余的空間仍然只包含 0。
假設我正確理解了這個問題,您可以遍歷arrayB
每個值並將其分配在arrayA
中的相同索引arrayA
:
const arrayA = Array(10).fill(0).map(_ => Array(10).fill(0)) const arrayB = Array(5).fill(0).map(_ => Array(8).fill(1)) for (let y = 0; y < arrayB.length; y++) { for (let x = 0; x < arrayB[y].length; x++) { arrayA[y][x] = arrayB[y][x] } } console.log(arrayA.map(v => v.join(', ')).join('\\n'))
console.log
只是為了便於閱讀,以了解矩陣的外觀。
一個簡單的Array.map()
將完成這項工作:
const arrA = [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ]; const arrB = [ [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], ]; const B2A = () => arrA.map( (val, index) => val.map( (subVal, subIndex) => { if(arrB[index] && arrB[index][subIndex]) return arrB[index][subIndex] return subVal; }) ) console.log(B2A());
使用Array.from
並迭代,而迭代檢查填充數組中是否存在該值。 如果存在,則使用該值,否則使用相同的數組值。
const fill = (arr1, arr2) => Array.from(arr1, (arr, row) => Array.from(arr, (value, col) => (arr2[row] && arr2[row][col]) || value) ); const arrA = [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ]; const arrB = [ [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4] ]; console.log(JSON.stringify(fill(arrA, arrB)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.