Вот более улучшенная функция, она подходит как для заполнения матричного массива, так и линейного:
Array.prototype.assign = function func(form){
var self;
form.type = form.type || "matrix";
var map=function(a,i,e){
if(i>=form.ax && i<=form.bx && (!form.drop || (i-form.ax+1)%form.drop!==0)){
if(form.callback) return form.callback(a,i,e);
else return form.value;
}else return a;
}
if(form.type==="inline"){
self = this;
func.arr = self.map(map);
self.splice(0,self.length);
self.push.apply(self,func.arr);
return self;
}else if(form.type==="matrix"){
self = this[form.ay];
func.arr = self.map(map);
this[form.ay] = func.arr;
if(form.ay===form.by) return this;
else{
form.ay++;
return func.apply(this,arguments);
}
}
}
//value - присваиваемое значение
//callback - возвращаемая функция для каждого подходящего под случай элемента массива
//ax - начальный индекс по X, bx - конченый индекс по X
//ay - начальный индекс по Y, by - конченый индекс по Y
//drop - не присваивать каждому значению, индекс которого равен drop (начало от ax), значение value
//type - тип массива (inline - линейный, matrix - матричный) по умол. матрчный
var arr = [0,0,0,0,0,0,0,0,0,0,0];
arr.assign({value: 1, ax:1, bx:7, drop: 2, type: 'inline'}); //[0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0]
function rename(a,i){
return i+': Full';
}
var arr = ['Empty','Empty','Empty','Empty','Empty','Empty'];
arr.assign({callback: rename, ax: 0, bx: 4, drop: 2, type: 'inline'}); //["0: Full", "Empty", "2: Full", "Empty", "4: Full", "Empty"]
var arr = [[0,0,0],[0,0,0],[0,0,0]];
arr.assign({value: 1, ax: 0, ay: 0, bx: 1, by: 1, type: 'matrix'}); //[Array[3]->[1,1,0],Array[3]->[1,1,0],Array[3]->[0,0,0]]
var arr = [[0,0,0],[0,0,0],[0,0,0]];
arr.assign({value: 1, ax: 0, ay: 0, bx: 2, by: 2, drop: 3, type: 'matrix'});
/* |1 1 1|
|1 1 1|
|0 0 0| */