【问题标题】:Creating "m x n" Two Dimensional array in javascript在javascript中创建“m x n”二维数组
【发布时间】:2015-12-29 05:29:46
【问题描述】:

想在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 的数字 13:[[0,0,0,0], [1,1,1,1]....[13,13,13,13]]

也许在我的 for 循环中做错了什么,或者没有正确解决问题。但是任何可以为我指明正确方向以获得上述愿望结果的东西。

弹跳

也有人会向我指出与此类问题有关的矩阵代数的其他资源以及有助于自学的任何一般性资源。

非常感谢!

【问题讨论】:

标签: javascript arrays matrix linear-algebra


【解决方案1】:

保持简单,将输入 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 &lt; arr.length; i += numCols)numCols 中从 0 向上计数,例如i = 0, 4, 8, 16, ... 直到我们达到大于 arr.length 的数字
  • arr.slice(i, i + numCols) 创建 Array子数组,从(包括)索引 i 到(不包括)索引 i + numCols 结束,即我们得到一个 @987654335 @long Array 从索引 iarr 处的项目开始
  • arr2d.pusharr2d 的末尾追加一个新项目

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

的各个部分构建一个新的Array arr2d

【讨论】:

  • 谢谢!但是,您能否详细说明为什么要使用此解决方案的过程?仅用于学习目的。欣赏它:)
  • @Amechi 我在项目符号而不是 cmets 中添加了更多细节,因为我不确定您想了解哪些部分
【解决方案2】:

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

开始索引 = (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]);

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 2016-07-02
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2012-09-21
    相关资源
    最近更新 更多