うまくやる方法が見当たらないです…

とりあえず5x5の配列を1で初期化したいとします

普通にやるなら
var array = [];
for(var i=0;i<5;i++){
array[i] = [];
for(var j=0;j<5;j++)
array[i][j] = 1;
}
二重ループにします

あんまりキレイじゃないです
5次元配列を初期化したいとなったら5重のforになります
なんか良い方法がほしいです

次に思いついた方法
initarray = function(n,ini){return new Array(n).join(" ").split(" ").map(function(){return ini})};

initarray(5,initarray(5,1));
initarrayという配列の要素数と初期化する値を与えると配列を返してくれる関数を作ります
で、initarrayを入れ子にして二次元の配列を初期化します

initarrayの中身で無意味そうなjoinとsplitを行ってるのは、new Array(n)だとlengthがnの配列を返してくれるのですが、undefinedになっていてmapでの実行対象になりません
なので、joinしてsplitして空文字列が入った配列にしてからmapで各要素に初期化する値iniを入れてます

次元数だけinitarray書いてますけど、 まーさっきのよりはキレイかな? と思っていたら、
var a = initarray(2,initarray(2,1));
console.log(a);

[Array[2], Array[2]]
  0: Array[2]
    0: 1
    1: 1
    length: 2
    __proto__: Array[0]
  1: Array[2]
    0: 1
    1: 1
    length: 2
    __proto__: Array[0]
  length: 2
  __proto__: Array[0]

a[0][0] = 20;
console.log(a);

[Array[2], Array[2]]
  0: Array[2]
    0: 20   <--ココだけじゃなく
    1: 1
    length: 2
    __proto__: Array[0]
  1: Array[2]
    0: 20  <--ココも変わってる
    1: 1
    length: 2
    __proto__: Array[0]
  length: 2
  __proto__: Array[0]
一つ変えたら他の値まで変わりました…

そっか シャローコピーか…
初期化する値が1じゃなくてオブジェクトの事も考えてオブジェクトをディープコピーするのつくるか…
そうすれば↓みたいなので初期化できるようになるし

initarray = function(n,ini){return new Array(n).join(" ").split(" ").map(function(){return deepcopy(ini)})};


→続く...