【问题标题】:how to create nxn matrix/array in javascript?如何在 javascript 中创建 nxn 矩阵/数组?
【发布时间】:2016-08-31 06:34:16
【问题描述】:

我想创建一个行数不固定的数组或矩阵,例如

var matrix=[[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]]

我该怎么做?

【问题讨论】:

标签: javascript


【解决方案1】:

使用 Array.fromArray#fill 方法的 ES6 解决方案。

function matrix(m, n) {
  return Array.from({
    // generate array of length m
    length: m
    // inside map function generate array of size n
    // and fill it with `0`
  }, () => new Array(n).fill(0));
};

console.log(matrix(3,2));

【讨论】:

    【解决方案2】:

    你也可以使用如下代码:

    function matrix(m, n) {
        var result = []
        for(var i = 0; i < n; i++) {
            result.push(new Array(m).fill(0))
        }
        return result
    }
    console.log(matrix(2,5))
    

    【讨论】:

    • 不使用 .fill() 是否可以获得相同的结果?
    【解决方案3】:

    为了提高可读性

    const create = (amount) => new Array(amount).fill(0);
    const matrix = (rows, cols) => create(cols).map((o, i) => create(rows))
    
    console.log(matrix(2,5))
    

    代码更少

    const matrix = (rows, cols) => new Array(cols).fill(0).map((o, i) => new Array(rows).fill(0))
    
    console.log(matrix(2,5))
    

    【讨论】:

      【解决方案4】:

      可以这样做:

      Array(n).fill(Array(m).fill(0))
      

      在哪里

      n - number of rows
      m - number of columns
      

      【讨论】:

      • 每一行都会引用同一个对象!这可能是不希望的
      • 对,看看如果你声明例如会发生什么5x5矩阵这样然后设置a[2][3] = 1
      【解决方案5】:

      我使用以下 ES5 代码:

      var a = "123456".split("");
      var b = "abcd".split("");
      var A = a.length;
      var B = b.length;
      
      var t= new Array(A*B);
      for (i=0;i<t.length;i++) {t[i]=[[],[]];} 
      
      t.map(function(x,y) {
         x[0] = a[parseInt(y/B)];
         x[1] = b[parseInt(y%B)];
        });    
      t;
      

      它返回一个二维数组,显然您的输入不必是字符串。

      有关 ES6 和其他语言的一些惊人答案,请查看我在堆栈交换中的问题,ppcg

      【讨论】:

        【解决方案6】:
        function createArray(row, col) {
          let matrix = [];
          for (let i = 0; i < row; i++) {
            matrix.push([]);
            for (let j = 0; j < col; j++) {
              matrix[i].push([]);
            }
          }
          console.log(matrix);
        }
        
        createArray(2, 3);
        

        输出:- [ [ [], [], [] ], [ [], [], [] ] ]

        注意:如果您想获取带有值的数组,例如 [ [ [1], [1], [1] ], [ [1], [1], [1] ] ],则将第 6 行代码替换为 matrix[i].push([1]);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-15
          • 2022-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多