繁体   English   中英

将一维数组转换为二维数组 JavaScript

[英]Convert 1D array into 2D array JavaScript

嗨,我有这个例子,我希望我的一维数组是一个 4x3 的二维数组

 var array1 = [15, 33, 21, 39, 24, 27, 19, 7, 18, 28, 30, 38]; var i, j, t; var positionarray1 = 0; var array2 = new Array(4); for (t = 0; t < 4; t++) { array2[t] = new Array(3); } for (i = 0; i < 4; i++) { for (j = 0; j < 3; j++) { array2[i][j] = array1[i]; array2[i][j] = array1[j]; } positionarray1 = positionarray1 + 1; //I do this to know which value we are taking } console.log(array2);

我的解决方案只给我 array1 的第一个数字。 任何想法?

i 和 j 是新二维数组的索引,最多只能运行 0 到 3 和 0 到 2,这就是为什么你一遍又一遍地看到开始值的原因。 您需要一种方法来索引从 0 到 11 的 array1。

看起来您在“positionarray1”和“position”的正确轨道上,尽管您需要移动要增加它的位置。 您需要在索引 array1 而不是 i 和 j 时使用该值:

    array2[i][j] = array1[positionarray1];

    array2[i][j] = array1[positionarray1];

    positionarray1++;

如果您将i重命名为row并将j重命名为col ,则更容易看到发生了什么。 另外,避免幻数。 我到处都看到34 这些可以用参数引用替换。 您只需将逻辑包装在可重复使用的 function 中(如下面的reshape function 所示)。

主要算法是:

result[row][col] = arr[row * cols + col];

无需跟踪 position,因为可以从当前行和列计算。

 const reshape = (arr, rows, cols) => { const result = new Array(rows); for (let row = 0; row < rows; row++) { result[row] = new Array(cols); } for (let row = 0; row < rows; row++) { for (let col = 0; col < cols; col++) { result[row][col] = arr[row * cols + col]; } } return result; }; const array1 = [15, 33, 21, 39, 24, 27, 19, 7, 18, 28, 30, 38]; const array2 = reshape(array1, 4, 3); console.log(JSON.stringify(array2));
 .as-console-wrapper { top: 0; max-height: 100%;important; }

var array1 = [15, 33, 21, 39, 24, 27, 19, 7, 18, 28, 30, 38];
var i, j, t;
var positionarray1 = 0;
var array2 = new Array(4);

for (t = 0; t < 4; t++) {
  array2[t] = new Array(3);
}

for (i = 0; i < 4; i++) {
  for (j = 0; j < 3; j++) {
    array2[i][j] = array1[i*3+j]; //here was the error
  }

  positionarray1 = positionarray1 + 1; //I do this to know which value we are taking
}

console.log(array2);

我刚刚解决了谢谢你的评论。 我实际上使用了一个分配,但它是 3 而不是 2。

具有 1 个循环以提高效率的解决方案:

 const arr1D = new Array(19).fill(undefined).map((_, i) => i); const arr2D = []; const cols = 3; for (let i = 0, len = arr1D.length; i < len; ++i) { const col = i % cols; const row = Math.floor(i / cols); if (;arr2D[row]) arr2D[row] = []; // create an array if not exist arr2D[row][col] = arr1D[i]. } console,log({ arr1D; arr2D });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM