如何在JavaScript中创建nxn矩阵/数组?

6
我想创建一个具有非固定行数的数组或矩阵,例如

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]]

我该怎么做呢?


1
可能是Matrix of numbers javascript的重复问题。 - str
什么阻止你只是按照你已经编写的方式去做?在这里查看多维数组访问。 - Steffen Harbich
6个回答

14

使用 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() 是否可能获得相同的结果? - Madhav

2

为了更好的阅读体验

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))

0
我使用以下 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和其他语言的一些惊人答案,请查看我在Stack Exchange上的问题,ppcg


0
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]);


-1

可以这样做:

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

在哪里

n - number of rows
m - number of columns

1
每一行都将引用相同的对象!这可能不是期望的结果。 - askhat
看看如果你这样声明一个5x5的矩阵,然后设置a [2] [3] = 1会发生什么。 - pobu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接