创建特定大小的二维数组的最短方法是什么?
我认为以下代码非常简短,但你能用更少的代码来完成吗?
var x = 5;
var y = 7;
var my2dArray = (new Array(y)).fill(0).map(
function(){
return new Array(x);
}
);
答案 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