在 javascript 的二维数组中插入 1 个值

Insert 1 value in 2d array in javascript

我的代码需要一些帮助。我尝试在每个数组中只插入一个值。我需要先填写该行,然后再填写,如果该行已满,则移至下一列。我试图解决这部分几天,但我失败了。所以这是我的代码

const testData = [1,2,3,4,5,6,7,8,9];                
const create2dArray = (row, column) => {
                    var result = [];
                    for(let i = 0; i< row; i++){
                        result[i]= [];
                        for(let j = 0; j<column; j++){   
                            result[i][j] = [];
                            for(let e = 0; e < testData.length; e++){
                            result[i][j] = [testData[e]];
                            }
                        }
                    }
                    return result;
            
                }
            let Column = 5
            let Row = 5
            filterQuotaData(EnrollmentQuota);
            var ground = create2dArray(Column,Row);
            console.log(ground);

假设输出为:

[1],[2],[3],[4],[5]
[6],[7],[8],[9],[]
[],[],[],[],[]
[],[],[],[],[]
[],[],[],[],[]

相反,我得到了:

[9],[9],[9],[9],[9]
[9],[9],[9],[9],[9]
[9],[9],[9],[9],[9]
[9],[9],[9],[9],[9]
[9],[9],[9],[9],[9]

希望有人能帮我解决这个问题

以下代码

const testData = [1,2,3,4,5,6,7,8,9];                
const create2dArray = (row, column) => {
                    var result = [];
                    k = 0
                    for(let i = 0; i< row; i++){
                        result[i]= [];
                        for(let j = 0; j<column; j++){   
                            if(k < testData.length) {
                              result[i][j] = [testData[k]];
                            } else {
                              result[i][j] = [];
                            }
                            k++
                        }
                    }
                    return result;
            
                }
            let Column = 5
            let Row = 5
            //filterQuotaData(EnrollmentQuota);
            var ground = create2dArray(Column,Row);
            console.log(ground);

生产

[
  [ [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ],
  [ [ 6 ], [ 7 ], [ 8 ], [ 9 ], [] ],
  [ [], [], [], [], [] ],
  [ [], [], [], [], [] ],
  [ [], [], [], [], [] ]
]

它是你需要的吗?

您的代码中发生的事情是,您在第三个循环中将所有内容添加到第二个循环中的每一列。它们都是 9 的原因是因为您通过使用赋值而不是将其添加到数组来覆盖每一列:

// 3rd loop
array[0][0][0] = 1 // 1st iteration [[[1],...]]
array[0][0][1] = 2 // 2nd iteration [[[2],...]]

这是一个使用 2 个循环并压入 sub-arrays 并从测试数组转移的示例。

const test = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const create2dArray = (row, column) => {
  let result = [];
  for (let r = 0; r < row; r++) {
    result.push([]);
    for (let c = 0; c < column; c++) {
      let data = test.length < 1 ? [] : [test.shift()]
      result[r].push(data);
    }
  }
  return result;
}
let row = 5, col = 5;

let ground = create2dArray(row, col);
console.log(JSON.stringify(ground));