创建2d数组特定大小的最短方法

时间:2014-10-25 09:48:02

标签: javascript

创建特定大小的二维数组的最短方法是什么?

我认为以下代码非常简短,但你能用更少的代码来完成吗?

var x = 5;
var y = 7;
var my2dArray = (new Array(y)).fill(0).map(
                                            function(){
                                               return new Array(x);
                                            }
                                          );

2 个答案:

答案 0 :(得分:11)

Array.apply(0, Array(x)).map(function() { return Array.apply(0, Array(y)); })

如果你写一点便利例程,会更简单

function make_array(x) { return Array.apply(0, Array(x)); }

然后

make_array(x).map(function() { return make_array(y);} )

或者如果您愿意

make_array(x).map(make_array.bind(0, y))

如果你正在写ES6:

Array(...Array(x)).map(() => Array(y));

如果您更喜欢使用fill,那么您似乎可以使用它:

Array(x).fill().map(function() { return Array(y); });
使用箭头函数在ES6中更简洁或更简洁:

Array(x).fill().map(() => Array(y));

事实证明Array#fill不需要参数;没有它,它会用未定义的元素替换缺少的元素。

答案 1 :(得分:3)

建立自己的班级怎么样?

function Array2D(xSize, ySize, initialValue) {
  initialValue=initialValue || 0;
  // create an flat empty array filled with the initial value 
  var length = xSize*ySize;
  var innerArray = new Array(length);
  for (var i=0; i<length; i++) innerArray[i] = initialValue;
  // accessors
  this.getAt = function(x, y) { return innerArray[x+xSize*y]};
  this.setAt = function(x, y, val) { innerArray[x+xSize*y]=val};
}

使用:

var myArray2d = new Array2D(5,7);

myArray2d.setAt(1,1,3);
var value = myArray2d.getAt(1,1);        // == 3
var anotherValue = myArray2d.getAt(2,2); // == 0