2013-08-09 3 views
1

Я хотел бы выбрать кусок 2D-массива из большого 2D-массива, я знаю, как это сделать, используя петли, но мне было интересно, есть ли более эффективный способ достижения этого.Выберите 2D-массив из 2D-массива в javascript

Пример:

[0,0,0,0,0,1,0] 
[0,0,0,3,0,1,0] 
[0,0,0,0,0,1,0] 
[0,0,0,0,0,1,0] 

Из этого массива я хотел бы создать новый массив, содержащий

[0.0.1] 
[3.0.1] 
[0.0.1] 

Так есть ли более эффективные пути для создания второго массива, чем с помощью некоторых простых для петель?

+0

Было бы полезно, если бы вы могли отображать массивы в действительном формате JavaScript. Трудно догадаться, какова фактическая структура. – JJJ

+0

Определите «более эффективный». Для циклов кажется довольно эффективным, но тогда мы не знаем, что вы используете для этого ... Например, было бы более эффективно просто смещать каждый доступ в исходный массив. –

+0

Я думаю, что однажды я поставил вопрос, который был почти идентичен этому. Я постараюсь найти вопрос, который я разместил, поскольку он может быть полезен здесь. –

ответ

1

Я не могу говорить с относительной эффективностью этого метода по сравнению с для захода на посадку петли, но вы мог рычагов slice функции JavaScript массива для 2-го размера (не первого.

Array.prototype.extract2d = function extract2d(x1, y1, x2, y2) 
{ 
    var result = []; 
    for (var y = y1; y <= y2; y++) 
    { 
     result.push(this[y].slice(x1, x2)); 
    } 
    return result; 
} 

Таким образом, вы можете сделать это:

var grid = 
[ 
    [0,0,0,0,0,1,0], 
    [0,0,0,3,0,1,0], 
    [0,0,0,0,0,1,0], 
    [0,0,0,0,0,1,0] 
]; 

var subgrid = grid.extract2d(3, 0, 5, 2); 

Обратите внимание на отсутствие проверки границ или подтверждение того, что суб-массивы, на самом деле, подмассивы

!
Смежные вопросы