質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

752閲覧

Javascriptで二次元配列の要素をN個ずつ縦に足していきたいです。

hachimitu_remon

総合スコア14

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

2クリップ

投稿2020/01/11 10:28

Javascript

1[ 2 [NaN, NaN, NaN, NaN], 3 [a1, b1, c1, d1], 4 [a2, b2, c2, d2], 5 [a3, b3, c3, d3], 6 [a4, b4, c4, d4], 7 ・・・ 8 ・・・ 9 [a300, b300, c300, d300], 10 [NaN, NaN, NaN, NaN] 11];

このような二次元配列の要素を10個ずつ足していき、新しい二次元配列を作りたいのですが、
縦に足していくやり方が分かりません。
言葉でうまく説明できないのですが、結果として得たい形は以下の通りです。

Javascript

1[ 2 [NaN, NaN, NaN, NaN], 3 [a1+a2+・・・+a9+a10, b1+b2+・・・+b9+b10, c1+c2+・・・+c9+c10, d1+d2+・・・+d9+d10], 4 [a11+a12+・・・+a19+a20, b11+b12+・・・+b19+b20, c11+c12+・・・+c19+c20, d11+d12+・・・+d19+d20], 5 [a21+a22+・・・+a29+a30, b21+b22+・・・+b29+b30, c21+c22+・・・+c29+c30, d21+d22+・・・+d29+d30], 6 ・・・ 7 ・・・ 8 [a291+a292+・・・+a299+a300, b291+b292+・・・+b299+b300, c291+c292+・・・+c299+c300, d291+d292+・・・+d299+d300] 9 [NaN, NaN, NaN, NaN] 10];

イメージとしては、
イメージ
という感じで縦に足していき、二次元配列としてまとめたいです。

具体的には私が持っている配列は下のように、最初と最後がNaNの要素になってしまっているため、
中の300行に対して和演算を行いたいです。

Javascript

1[ 2 [NaN, NaN, NaN, NaN], 3 [a1, b1, c1, d1], 4 [a2, b2, c2, d2], 5 [a3, b3, c3, d3], 6 [a4, b4, c4, d4], 7 ・・・ 8 ・・・ 9 [a300, b300, c300, d300], 10 [NaN, NaN, NaN, NaN] 11];

for文を作ってみようとしたのですが、二次元配列になるとアルゴリズムを頭でイメージする事ができず、
混乱してしまいました。
また昨日似たような質問をして、たくさんの方々にお答えを頂いたので、
それを応用して考えようと努力はしたのですが、勉強不足で分かりませんでした。。。

分かりづらい文章で申し訳ありませんが、
どなたかご教示のほど、よろしくお願いいたします。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2020/01/11 10:34

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
hachimitu_remon

2020/01/11 10:53

ご指摘ありがとうございます。 自分でも今試行錯誤していて、少しでも進められたらこちらに追記しようと思います。
guest

回答1

0

ベストアンサー

これと同じ?
https://teratail.com/questions/234337

こんな感じ?

javascript

1const data = [ 2 [NaN, NaN, NaN, NaN], 3 [1, 2, 3, 4], 4 [1, 2, 3, 4], 5 [1, 2, 3, 4], 6 [5, 6, 7, 8], 7 [5, 6, 7, 8], 8 [5, 6, 7, 8], 9 [9, 10, 11, 12], 10 [9, 10, 11, 12], 11 [9, 10, 11, 12], 12]; 13const split = (array, n) => array.reduce( 14 (a, c, i) => i == 0 ? [c] 15 : i % n == 1 ? [...a, [...c]] 16 : [...a.slice(0, -1), a[a.length - 1].map((v, i) => v + c[i])], 17 []); 18const result = split(data, 3); 19console.log(result)

実行結果

[ [ NaN, NaN, NaN, NaN ], [ 3, 6, 9, 12 ], [ 15, 18, 21, 24 ], [ 27, 30, 33, 36 ] ]

投稿2020/01/11 10:47

編集2020/01/11 12:14
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hachimitu_remon

2020/01/11 10:51

はい、その質問の内容を二次元配列に応用して配列を作ろうとしたのですが、 縦にどう足していくのかが分からなくて。。
shiracamus

2020/01/11 12:17

コードを書いてみました。 前回同様に、for文に書き直すといいと思います。
hachimitu_remon

2020/01/11 12:38

ありがとうございます。 繰り返し処理は難しく、いつも苦戦しています。 もっと勉強していこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問