在 JavaScript 中创建"m x n"二维数组



如果想用javascript创建一个二维m x n数组,根据列数,在我的函数中作为参数输入,行将从另一个参数创建,该参数将是一个数组。

我希望实现的目标-期望的结果:

var arr = [0,1,2,3,4,5,6,7,8,9]
function TwoDimensionalArray(numRows, numCols) {
//Magic happens here!
}
TwoDimensionalArray(arr, 4);

正如你所看到的,下面是一个3 x 4矩阵和一个期望的结果

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

输入大小没有区别,列数是关键因素和决定因素。

我目前拥有的-不希望的结果:

var arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13]
function TwoDimensionalArray(numRows, numColumns) {
   var twoD = [];
   for (var row = 0; row < numRows.length; ++row) {
     var cardIndex = numRows[row]
      // console.log(numRows[row]);
       var columns = [];
     for(var j =0; j < numColumns; ++j) {
        columns[j] = cardIndex;
    }
    twoD[cardIndex] = columns;
}
return twoD;
 };

var matrixTwoD = TwoDimensionalArray(arr, 4);
console.log(matrixTwoD);
console.log(matrixTwoD[0][0]);
console.log(matrixTwoD[0][1]);
console.log(matrixTwoD[0][2]);
console.log(matrixTwoD[0][3]);

我当前的代码创建了一个数组,它将每个元素重复4次,直到列大小为4:[[0,0,0,0], [1,1,1,1]....[13,13,13,13]]的数字13

也许我在for循环中做错了什么,或者没有正确处理问题。但任何能给我指明正确方向的东西都能得到上述渴望的结果。

反弹

此外,是否有人会向我介绍与这类问题有关的矩阵代数的额外资源,以及任何有助于自我学习的一般资源。

谢谢大家!

保持简单,将输入的Array切片为numCols长度的部分

function TwoDimensionalArray(arr, numCols) {
    var arr2d = [],
        i;
    if (numCols) // safety first!
        for (i = 0; i < arr.length; i += numCols)
            arr2d.push(arr.slice(i, i + numCols));
    return arr2d;
}

  • if (numCols)在未提供numCols或为0的情况下防止无限循环
  • for (i = 0; i < arr.length; i += numCols)numCols中的0向上计数,例如i = 0, 4, 8, 16, ...,直到我们达到大于arr.length的数字
  • arr.slice(i, i + numCols)创建Array子数组,从(包括)索引i开始,到(不包括)索引i + numCols结束,即我们得到一个长为numColsArray子阵列,从arr的索引i的项开始
  • arr2d.pusharr2d的末尾添加一个新项目

将所有这些放在一起,我们可以看到,我们正在从阵列arr

的部分构建一个新的数组arr2d

计算所需列,然后使用数组的slice方法。

开始索引=(numColumns*i)结束索引=numColumns*(i+1)

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
function TwoDimensionalArray(numRows, numColumns) {
  var columns = [];
  for (var i = 0; i !== Math.ceil(numRows.length / numColumns); i++) {
    columns[i] = numRows.slice((numColumns * i), numColumns * (i + 1))
      //console.log((numColumns * i) + " " +numColumns * (i + 1))
  }
  return columns;
};
var matrixTwoD = TwoDimensionalArray(arr, 4);
console.log(matrixTwoD);
console.log(matrixTwoD[0][0]);
console.log(matrixTwoD[0][1]);
console.log(matrixTwoD[0][2]);
console.log(matrixTwoD[0][3]);

相关内容

  • 没有找到相关文章

最新更新