'裁剪'二维数组?

Dig*_*ohn 5 javascript arrays multidimensional-array

我正在寻找一种高效的方式来裁剪二维数组.考虑这个例子:

我有一个二维数组,组成一个100x100网格.我只是想回报一下,60x60.这是一个'a'方法的例子,但我正在寻找指向最有效的方法.

// Settings
var gridWidth = 100;
var gridHeight = 100;

// Populate Grid
var grid = [];

for(var i = 0; i<gridWidth; i++){
    grid[i] = [];
    for(var j = 0; j<gridHeight; j++){
        grid[i][j] = 0;
    }
}

// Crop Grid
var rect = {x:20,y:20,w:60,h:60};

var crop = [];
for(var i = rect.x; i<rect.x+rect.w; i++){
    crop[i-rect.x] = [];
    for(var j = rect.y; j<rect.y+rect.h; j++){
        crop[i-rect.x][j-rect.y] = grid[i][j];
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法都非常感谢......

约翰

Asa*_*din 2

试试这样:

crop = grid.slice(rect.x, rect.x+rect.w);
for(var i = 0; i<crop.length; i++){
    crop[i] = crop[i].slice(rect.y, rect.y+rect.h);
}
Run Code Online (Sandbox Code Playgroud)

请注意,数组的维度现在为rect.wx rect.h,并且所有索引分别负偏移rect.xrect.y