JavaScriptでの配列のコピー及び加工
JavaScriptでの配列のコピー及び加工についてかれこれ丸一日悩んでいて、どうしても分からない事があったので質問します。
*やりたいこと*
ざっくり言うと受け取った配列から余因子行列を作成することです。詳しくは以下
1. 配列(A)を受け取る(例えば今回は二次元配列に3x3行列が格納されているものとします)
2. Aの2行目以降を新しい配列(D)にコピー
3. 繰返し処理でDのそれぞれの要素(今回は二行目と三行目)からi番目の要素を削除
4. Dを出力
5. 2に戻る
入力: A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
出力: 1回目: [[5, 6], [8, 9]]
2回目: [[4, 6], [7, 9]]
3回目: [[4, 5], [7, 8]]
現段階で書いたコードは以下の通りです。
this.dimention = 3
arrayMatrix = [[1, 2 , 3], [4, 5, 6], [7, 8, 9]]
for (var i = 0; i < this.dimention; i++) {
var Dij = new Array(this.dimention)
for (var k = 0; k < this.dimention; k++) {
Dij[k] = arrayMatrix[k]
}
Dij = Dij.slice(1)
for (var j = 0; j < this.dimention - 1; j++) {
Dij[j].splice(i, 1)
}
console.log(Dij)
}
まずDを使い回すためにコピーしているのですが要素を削除すると元の配列にも影響し次のDの作成ができなくなってしまいます。
そのためシャローコーピでなくコードの様なディープコピーを色々試してみたのですがどうしても元の配列の要素も削除されてしまいます。
そもそも実装方法でもっといいものがあるような気がしてならないです。
解決方法でなくても何か参考になることがあれば是非教えて頂きたいです。
追記
以下の方法で現状目的は達成されました。これでも3重ループになってしまっているので、他のいい実装方法があれば教えて頂きたいです。
dimention = 3
arrayMatrix = [[1, 2 , 3], [4, 5, 6], [7, 8, 9]]
for (var i = 0; i < this.dimention; i++) {
var Dij = []
for (var k = 0; k < this.dimention - 1; k++) {
Dij.push([])
for (var l = 0; l < this.dimention; l++) {
if (l !== i) {
Dij[k].push(arrayMatrix[k + 1][l])
}
}
}
}