组合多个2d阵列

时间:2014-01-22 17:49:44

标签: javascript arrays

我有以下javascript代码:

function Board() {
   // 2d array of 'Pieces'
  this.Map = [
    [new Piece(), new Piece(), new Piece()],
    [new Piece(), new Piece(), new Piece()],
    [new Piece(), new Piece(), new Piece()]
  ];

   // return full 9x9 2d integer array
   this.GetDetailedMap = function() {
     //?
   }
}

function Piece() {
   //2d array of integers
   this.Layout = [
     [1,0,1],
     [0,0,0],
     [1,0,1]
   ]
}

function DifferentPiece() {
   //2d array of integers
   this.Layout = [
     [1,0,1,1],
     [0,0,0,0],
     [0,0,0,0],
     [1,0,1,1],
   ]
}

GetDetailedMap()应该做的是返回一个9x9的2d数组,该数组包含右索引处每个部分的布局。

所有'Piece'布局始终是方形的。所有部件都可以升级,例如:4x4,6x6等。不应该有一件3x3和另一件4x4。

我该如何实现这个功能?

编辑: 我自己接近解决它,但我有一些错误,我的代码不像接受的答案那么整洁。

1 个答案:

答案 0 :(得分:0)

这应该这样做:

this.GetDetailedMap = function flatMap() {
    var piecesize = this.Map[0][0].Layout.length;
    var detailedMap = [];
    for (var i=0; i<this.Map.length; i++) {
        var mapRow = this.Map[i];
        for (var j=0; j<piecesize; j++) {
            var detailedRow = [];
            for (var k=0; k<mapRow.length; k++) {
                var pieceRow = mapRow[k].Layout[j];
                for (var l=0; l<pieceRow.length; l++) {
                    detailedRow.push(pieceRow[l]);
                }
            }
            detailedMap.push(detailedRow);
        }
    }
    return detailedMap;
}